gpt4 book ai didi

mongodb - 聚合框架需要将字段值与组总计相匹配

转载 作者:可可西里 更新时间:2023-11-01 10:41:02 26 4
gpt4 key购买 nike

我有一组学生文档,例如:

{
"_id" : 1,
"Student" : "Sim",
"Test1" : 59,
"Test2" : 94,
"Test3" : 81
}
{
"_id" : 2,
"Student" : "Sam",
"Test1" : 60,
"Test2" : 77,
"Test3" : 81
}

我需要使用聚合框架对 Test1 分数低于整个类(class)所有测试的总平均分的学生姓名进行罚款。

我可以在下面的组部分中获得总平均值,但是,,,

如果

db.students.aggregate([
{$project: {
Stu: '$Student',
Test1: '$Test1',
av: {$avg: ['$Test1', '$Test2', '$Test3']}
} },
{$group: { _id: null,
totAvg: {$avg : '$av'}
}
]);

到那时我失去了 student 和 test1 在比赛部分进行比较。

最佳答案

使用 $push + $filter

$push$group 阶段保留所有 test1 标记和 Student 名称后跟 $filter$project 阶段将它们与总平均分数进行比较并保留匹配记录。

您可以将 $filter 包装在 $map 中以仅转换学生姓名。

db.students.aggregate([{
$project: {
Stu: '$Student',
Test1: '$Test1',
av: {
$avg: ['$Test1', '$Test2', '$Test3']
}
}
},
{
$group: {
_id: null,
studentTest1: {
$push: {
"Student": "$Stu",
"Test1": "$Test1"
}
},
totAvg: {
$avg: '$av'
}
}
},
{ $project:
{ lessthanAvgStudentNames:
{
$map:
{
input: {
$filter: {
input: "$studentTest1",
as: "resultf",
cond: {
$lt: ["$$resultf.Test1", "$totAvg"]
}
}
},
as: "resultm",
in: "$$resultm.Student"
}
}
}
}
]);

关于mongodb - 聚合框架需要将字段值与组总计相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43595849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com