JAVA_dance 2015-06-12 09:31 采纳率: 0%
浏览 781

mongodb对象的子数组计算相关疑问

结构:{
name:"张三",sex:"男",scroe:[{lesson:"物理",total:60},{lesson:"化学",total:72}],
name:"李四",sex:"女",scroe:[{lesson:"物理",total:92},{lesson:"数学",total:81}]
}

我现在需要查询全班所有课程的总分数是多少,例如结果为:

物理:152

化学:72

数学:81

这个在Mongodb中应如何处理?麻烦大侠们别说用mapreduce或者appregate实现,我需要一个具体的计算方法?万分感激。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 23:35
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你可以使用MongoDB的聚合框架(Aggregation Framework)来完成这个任务。以下是一个示例:

    db.collection.aggregate([
        {
            $match: { "name": { "$regex": "^张" } }
        },
        {
            $group: {
                _id: "$name",
                totalScore: { $sum: "$scroe.total" }
            }
        },
        {
            $sort: { "_id": 1 }
        }
    ]);
    

    在这个例子中,我们首先使用$match语句筛选出包含“张”的名字的所有文档。然后,我们使用$group语句将这些文档按姓名进行分组,并计算每个姓名的总分数。最后,我们使用$sort语句按照姓名排序。

    如果你想要获取特定课程的总分数,你可以修改$match$group中的条件。例如,如果你想获取物理课程的总分数,你可以在$match语句中添加{$or: [{lesson: "物理"}, {$not: {lesson: "数学"}}]},以匹配含有“物理”或不包含“数学”的文档。

    评论

报告相同问题?