我开始学习MongoDB,我正在尝试找到如何在组查询中显示addtional字段。
说我有以下文件,我想找到每个班级学生的最高分数。
{ "_id" : { "class_id" : 1, "student_id" : 40 }, "avgStudentScore" : 62 }
{ "_id" : { "class_id" : 1, "student_id" : 44 }, "avgStudentScore" : 79 }
{ "_id" : { "class_id" : 2, "student_id" : 0 }, "avgStudentScore" : 53 }
{ "_id" : { "class_id" : 2, "student_id" : 24 }, "avgStudentScore" : 60 }
{ "_id" : { "class_id" : 0, "student_id" : 15 }, "avgStudentScore" : 51 }
{ "_id" : { "class_id" : 0, "student_id" : 25 }, "avgStudentScore" : 66 }
{ "_id" : { "class_id" : 0, "student_id" : 30 }, "avgStudentScore" : 32 }
我可以使用以下组聚合查询来执行此操作。
{
$group:
{
"_id" :
{
"class_id" : "$_id.class_id",
},
"maxStudentScore" :
{
$max : "$avgStudentScore"
}
}
}
我的结果将是,
{ "_id" : { "class_id" : 1 }, "maxStudentScore" : 79 }
{ "_id" : { "class_id" : 2 }, "maxStudentScore" : 60 }
{ "_id" : { "class_id" : 0 }, "maxStudentScore" : 66 }
但是我失去了获得最高分的student_id。如何在最终结果中显示student_id?感谢。
答案 0 :(得分:3)
您可以在分组前尝试排序,这样您就可以使用第一个选择学生ID。
aggregate([ {
$sort: {
"_id.class_id": 1,
"avgStudentScore": -1
}
},{
$group: {
"_id": {
"class_id": "$_id.class_id",
},
"student_id": {
$first: "$_id.student_id"
},
"maxStudentScore": {
$max: "$avgStudentScore"
}
}
}])
示例输出:
{ "_id" : { "class_id" : 2 }, "student_id" : 24, "maxStudentScore" : 60 }
{ "_id" : { "class_id" : 1 }, "student_id" : 44, "maxStudentScore" : 79 }
{ "_id" : { "class_id" : 0 }, "student_id" : 25, "maxStudentScore" : 66 }