MongoDB - 使用Aggregate在数组中获取多个匹配对象

时间:2015-06-02 21:32:27

标签: arrays mongodb

我正在努力完成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的截图:

enter image description here

在答案中的第三个查询中,我为unexpected token所在的行获得"input"

我正在使用MongoDB 3.0.2版。似乎OP在答案中是成功的,所以我想知道是否存在版本问题,或者我是否以错误的方式接近它。

1 个答案:

答案 0 :(得分:1)

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

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