【问题标题】:How to write a MongoDB query that finds a field match from a JavaScript array如何编写从 JavaScript 数组中查找字段匹配的 MongoDB 查询
【发布时间】:2016-11-24 02:23:18
【问题描述】:

我正在尝试组合一个 MongoDB 查询,该查询将返回字段等于 JavaScript 数组中存在的值的结果。到目前为止,我已经将以下代码放在一起,但它不起作用。我希望集合中的 number 字段在 versions 数组中找到匹配项。我认为我的"list" 部分在第一个$project 下使用$map 是错误的。

//example data
var versions = ['v1', 'v2', 'v3'];

function getResults(versions) {

    var query =
    {
        "db": "db-name",
        "collection": "collection-name",
        "query":
        [
            {
                $match: {
                    time:  getStartTime(),
                }
            },
            {
                $project:
                {
                    number: "$number",
                    session_id: "$session_id",
                    round_id: "$_id",
                    "list": {
                        "$map": {
                            "input": { "$filter": {
                                "input": versions,
                                "as": "versions",
                                "cond": {
                                    "$eq": [ "$$versions.value", "$number" ]
                                }
                            }},
                            "as": "versions",
                            "in": "$$versions.value"
                        }
                    }

                }
            },
            {
                $group:
                {
                    _id: "$session_id",
                    number: { $first: "$list" },
                    rounds: { $addToSet: "$round_id" }
                }
            },
            {
                $project:
                {
                    number: "$number",
                    rounds: "$rounds"
                }
            }
        ]
    }
    return query;
}

【问题讨论】:

  • 能否提供样本输入数据和预期结果?

标签: javascript mongodb nosql


【解决方案1】:

您能否提供更多有关您正在尝试做的事情的信息?

也许你可以使用 filter by javascript array

这是一个示例代码:

function isBigEnough(value) {
  return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

也许过滤器可能对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2021-01-18
    • 2016-10-22
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多