假设我有数据库结构;
[
{name: "alex" , surname: "brown" , school: "washington"},
{name: "felix" , surname: "yellow" , school: "georgia"},
{name: "felix" , surname: "yellow" , school: "georgia"},
{name: "tommy" , surname: "brown" , school: "davis"},
{name: "tommy" , surname: "brown" , school: "davis"},
{name: "tommy" , surname: "brown" , school: "davis"},
{name: "tommy" , surname: "brown" , school: "davis"}
]
我想做的是根据他们的学校信息对他们进行分组。 所以预期的结果是;
{
school: davis
students: [
{name: "tommy" , surname: "brown"},
{name: "tommy" , surname: "brown"},
{name: "tommy" , surname: "brown"},
{name: "tommy" , surname: "brown"},
]
},
{
school: georgia
students: [
{name: "felix" , surname: "yellow"}
]
},
{
school: washington
students: [
{name: "alex" , surname: "brown"}
]
}
为了能够做到这一点,我考虑使用$group
作为;
db.collection.aggregate([
{$group: {"_id" : "$school", name : "$name" , surname: "$surname"}}
])
但我想,我误解了$group
。那我怎么写这个查询呢?
答案 0 :(得分:1)
您可以执行以下操作:
db.your_collection.aggregate([
{ $group : {
_id : '$school',
'students' : {
$push: { name : '$name', surname : '$surname'
}
}
}
}
])