MongoDB聚合查询问题:统计指定请求者的已开启、已关闭任务数量
正确聚合查询语句
db.getCollection("sample").aggregate([ // 筛选匹配Requestor.Info._id为155的文档 { $match: { "Requestor.Info._id": "155" } }, // 对所有匹配文档做全局聚合统计 { $group: { _id: null, // 所有匹配文档归为同一组统计 Open: { $sum: { $cond: [{$eq: ["$JobStatus.Status", 0]}, 1, 0] } }, Closed: { $sum: { $cond: [{$eq: ["$JobStatus.Status", 1]}, 1, 0] } } } }, // 移除默认返回的_id字段,匹配预期输出格式 { $project: { _id: 0, Open: 1, Closed: 1 } } ])
原写法问题说明
$project阶段是对单条文档做字段处理,无法跨文档累计求和,原写法只会给每条匹配文档的Open、Closed字段赋值0或1,不会统计总数- $sum做条件计数需要在
$group阶段配合$cond条件表达式:符合条件返回1累加,不符合返回0不累加
执行上述语句后即可返回预期结果:{ "Open" : 2, "Closed" : 1 }
内容的提问来源于stack exchange,提问作者muscleman71
相关产品推荐
相关产品推荐

