基于mongodb中的字段的组

时间:2017-05-12 12:02:49

标签: node.js mongodb

假设我有数据库结构;

[
    {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。那我怎么写这个查询呢?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

db.your_collection.aggregate([
    { $group : {
            _id : '$school',
            'students' : { 
                $push: { name : '$name', surname : '$surname'
                }
            }
        }
    }
])