【问题标题】:MongoDB - Using Aggregate to get more than one Matching Object in an ArrayMongoDB - 使用聚合在数组中获取多个匹配对象
【发布时间】:2015-06-02 21:32:27
【问题描述】:

我正在尝试完全按照this link 中的海报尝试完成的工作。我有与海报结构相同的文件;在我的文档中有一个对象数组,每个对象都有很多键。我想带回该数组中键的值与我的查询匹配的所有对象(不仅仅是第一个对象,就像您可以使用$elemMatch 一样)。我希望我的查询结果只是一个对象数组,其中每个对象中都有一个与我的查询匹配的键。例如,在链接问题的情况下,我想返回一个对象数组,其中"class":"s2"。我想退货:

"FilterMetric" : [ 
              {
                "min" : "0.00",
                "max" : "16.83",
                "avg" : "0.00",
                "class" : "s2"
              }, 
              {
                "min" : "0.00",
                "max" : "16.83",
                "avg" : "0.00",
                "class" : "s2"
              } 
                ]

我尝试了答案中的所有查询。前两个查询在 robomongo 中返回一个空数组。在 shell 中,该命令什么也不做,而是让我回到下一行。这是robomongo的截图:

在答案中的第三个查询中,我得到一个 unexpected token 代表 "input" 所在的行。

我使用的是 MongoDB 版本 3.0.2。看来 OP 的答案似乎是成功的,所以我想知道是否存在版本问题,或者我是否以错误的方式处理这个问题。

【问题讨论】:

    标签: arrays mongodb


    【解决方案1】:

    该问题的答案的唯一问题似乎是他们为FilterMetric 使用了错误的大小写。例如,这有效:

    db.sample.aggregate([
        { "$match": { "FilterMetric.class": "s2" } },
        { "$unwind": "$FilterMetric" },
        { "$match": { "FilterMetric.class": "s2" } },
        { "$group": {
            "_id": "$_id",
            "FilterMetric": { "$push": "$FilterMetric" }
        }}
    ])
    

    【讨论】:

    • 嘿,这样就可以了,最后添加:"$project" : {"_id":0, "array":1}} 以删除 objectId。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 2022-11-30
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2023-02-14
    • 2019-07-17
    相关资源
    最近更新 更多