鉴于此数据模型
{
{
"student":"a",
"grade": "A"
},
{
"student": "a",
"grade": "B"
},
{
"student": "B",
"grade": "C"
},
{
"student": "B",
"grade": "C"
}
}
我如何按学生分组并说学生a有1 A和1 B,学生b有2 C?我是mongo的新手,我尝试查找聚合和匹配,但不知道如何正确实现它。
谢谢。
答案 0 :(得分:0)
您的查询将如下所示:
db.students.aggregate([
{$group:{_id:"$student", grade:"$grade", count:{$sum:1}}}
])
如果您有嵌套数组,请将其更改为:
db.students.aggregate([
{$group:{_id:"$parent.student", grade:"$parent.grade", count:{$sum:1}}}
])
其中parent
是嵌套数组中的父元素。
答案 1 :(得分:0)
您需要按年级分组并使用$sum
累加器。然后输出学生,使用$addToSet
并将其添加到投影中:
db.students.aggregate([
{
$match: {} // match any student
}, {
$group: {
_id: "$grade",
total: {
$sum: 1
},
student: {
$addToSet: "$student"
}
}
}, {
$project: {
"student": 1,
_id: 0,
total: 1
}
}
]);
注意:结果数据中的student字段可以根据需要命名,名称来自$group
子句(“total”名称相同)。我还选择不在投影中返回_id
。