投影包含数组mongodb中某个字段的所有对象

时间:2014-05-12 12:30:07

标签: mongodb aggregation-framework

我的另一个mongodb问题:

我试图在我的mongodb中为所有用户分组数组中的一些项目:这是一个文档

        {
         name: "Foo Bar",
         groups:[{
              groupName: "Group D",
              score:[2,1]
            },
            {
              groupName: "Group D",
              score:[3,0]
            },
            {
              groupName: "Group C",
              score:[2,2]
            }]

    }

所有用户都具有相同的结构,只有分数会发生变化。 我想回顾所有用户,并返回他们所有的" Group D"对象,与其名称组合在一起 - 我的解决方案的结果需要如下所示:

 result:
    [{name:"Foo Bar", 
       groups:[{
                      groupName: "Group D",
                      score:[2,1]
               },
               {
                      groupName: "Group D",
                      score:[3,0]
               }]
   },{//*More users*//}]

所以我知道我需要$ group,可能是$ all,$ aggregate,$ wind ......

但我看到的所有示例都是针对查询部分而不是find()的投影部分。我需要从所有用户处获取此信息,但我不想处理所有用户并开始扫描mongodb之外的信息...换句话说 - 复杂投影,是否可能?

1 个答案:

答案 0 :(得分:3)

相当简单:

db.collection.aggregate([
    // Unwind the array
    { "$unwind": "$groups" },

    // Match the elements you want
    { "$match": { "groups.groupName": "Group D" } },

    // Group back to the original form
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "groups": { "$push": "$groups" }
    }}
])

那应该这样做。