我的另一个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之外的信息...换句话说 - 复杂投影,是否可能?
答案 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" }
}}
])
那应该这样做。