Mongodb 聚合框架、组和平均值
我的数据集如下所示:Mongodb 聚合框架、组和平均值,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的数据集如下所示: Student,Test1,Test2,Test3 Saeed,59,94,81 Sam,60,77,81 Sammy,77,77,77 Saman,76,76,34 Shah,19,61,72 我想得到总平均分最高的学生名字 首先,我试图得到每个学生的平均数,但我的查询有错误。我不明白为什么 db.students.aggregate({$group : {_id:"$Student", Average: {$avg:["$Test1", "$Test2", "$Tes
Student,Test1,Test2,Test3
Saeed,59,94,81
Sam,60,77,81
Sammy,77,77,77
Saman,76,76,34
Shah,19,61,72
我想得到总平均分最高的学生名字
首先,我试图得到每个学生的平均数,但我的查询有错误。我不明白为什么
db.students.aggregate({$group : {_id:"$Student", Average: {$avg:["$Test1", "$Test2", "$Test3"]}}})
您不需要
$group
阶段
使用$project
计算$avg
,然后计算$sort
desc和$limit
到1
db.students.aggregate({
$project: {
Student: 1,
avg: {
$avg: ["$Test1", "$Test2", "$Test3"]
}
}
}, {
$sort: {
avg: -1
}
}, {
$limit: 1
})
参考$avg
如果有两个学生具有相同的最高平均分怎么办?您可以在
$sort
和$limit
之前添加$group
阶段{$group:{{id:$avg],学生:{$push:$Student}}}
,这将推动具有相同平均分的学生。非常感谢您的帮助!!我尝试使用不同的逻辑,但不知道如何编写代码:首先使用$project获得$avg,然后$group获得$max.db.students.aggregate({$project:{u id:“$Student”,avg:{$avg:[“$Test1”,“$Test2”,“$Test3”]}},{$group:{id:“$Student”,max:{$max:{$max:“$avg”}}}),但结果是这样的{u id:null,“max”:94.666666666667}。我还想显示学生姓名和每个考试分数。请尝试db.students.aggregate({$project:{{u id:$student],Avg:{$Avg:[“$Test1”,“$Test2”,“$Test3”]}}},{$group:{u id:$u id”,Max:{$Max:$Avg}}}
。$project
阶段仅保留您在阶段中列出的字段。谢谢!这个查询给了我_id:null,max。我如何显示那个学生的名字和他的每次考试分数?