MongoDB中按work.type分组统计指定学生的score.number字段总和方法
实现方案
你可以通过MongoDB聚合框架的条件聚合逻辑实现需求,无需按work.type拆分分组,直接在分组统计时按类型做条件求和即可得到单条结果,查询语句如下:
db.collection.aggregate([ // 过滤仅保留学生A的记录 { $match: { name: "A" } }, // 按学生维度分组,分别统计两类作业的得分总和 { $group: { _id: "$name", hw: { $sum: { $cond: [{ $eq: ["$work.type", "hw"] }, "$score.number", 0] } }, cw: { $sum: { $cond: [{ $eq: ["$work.type", "cw"] }, "$score.number", 0] } } } }, // 可选:调整输出字段结构,移除默认的_id字段 { $project: { _id: 0, name: "$_id", hw: 1, cw: 1 } } ])
补充说明
如果你的work字段是数组类型,需要在$match之后新增一步$unwind: "$work",先把数组拆分为单条记录再做统计即可。
内容的提问来源于stack exchange,提问作者Smitha
相关产品推荐
相关产品推荐

