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

按Mongodb中字段的平均值计算文档数,mongodb,aggregation-framework,average,Mongodb,Aggregation Framework,Average,我们的学生在4个领域的分数建模如下: { "_id" : xxx, "student" : "Private Ryan", "math" : 9, "history" : 8, "literature" : 6, "science" : 10 } 任务是计算有多少学生表现良好/一般/不好。鉴于: 好:平均得分>=8分 不好:平均分数

我们的学生在4个领域的分数建模如下:

{
    "_id" : xxx,
    "student" : "Private Ryan",
    "math" : 9,
    "history" : 8,
    "literature" : 6,
    "science" : 10  
}
任务是计算有多少学生表现良好/一般/不好。鉴于:

  • 好:平均得分>=8分
  • 不好:平均分数<5
如果可能的话,也可以使用标签。你可以使用和定义每个学生的“标签”。要应用条件逻辑,可以利用或加倍。然后,您需要运行以计算它们,还可以使用以在最终结果中获取整个文档:

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" }
        }
    }
])

您能否至少用一些示例文档和预期的输出示例来展示您的尝试?这是每个学生所有科目的平均值还是每个科目的平均值?解释很清楚,结果正是我想要的(但不知道如何实现)。它在我的devdb上也非常快,但我想它也可以接受大约1000万个文档的速度