按Mongodb中字段的平均值计算文档



我们学生在 4 个领域的分数是这样建模的:

{
"_id" : xxx,
"student" : "Private Ryan",
"math" : 9,
"history" : 8,
"literature" : 6,
"science" : 10  
}

任务是计算有多少good/average/bad表演的学生。鉴于:

  • 好:有average >= 8
  • 不好:有average score < 5

如果可能的话,把它们桶起来也会很好。

您可以使用$addFields和$let为每个学生定义"标签"。要应用条件逻辑,您可以利用$switch或双$cond。然后,您需要运行$group来计算它们,还可以使用$push在最终结果中获取整个文档:

db.collection.aggregate([
{
$addFields: {
label: {
$let: {
vars: { 
avg: { 
$divide: [ { $sum: [ "$math", "$history", "$literature", "$science" ] }, 4 ] 
} 
},
in: { 
$cond: [ 
{ $gte: [ "$$avg", 8 ] }, 
"good", 
{ $cond: [ { $lt: [ "$$avg", 5 ] }, "bad", "average" ] } 
] 
}
}
}
}
},
{
$group: {
_id: "$label",
count: { $sum: 1 },
students: { $push: "$$ROOT" }
}
}
])

蒙戈游乐场

最新更新