如何在MongoDB的组聚合查询中显示其他字段

时间:2016-11-13 21:44:34

标签: mongodb aggregation-framework

我开始学习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?感谢。

1 个答案:

答案 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 }