Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 聚合框架、组和平均值_Mongodb_Aggregation Framework - Fatal编程技术网

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。我如何显示那个学生的名字和他的每次考试分数?