能否在MongoDB单次聚合中按name分组统计多状态文档数量?
MongoDB 单次聚合实现按名称分组统计不同状态订单数量
可以通过单次聚合操作实现需求,使用$group阶段结合$sum和$cond操作符就能同时统计两种状态的文档数量,具体聚合管道如下:
db.yourCollectionName.aggregate([ { $group: { _id: "$name", pendingOrder: { $sum: { $cond: [{ $eq: ["$status", "pending"] }, 1, 0] } }, doneOrder: { $sum: { $cond: [{ $eq: ["$status", "done"] }, 1, 0] } } } }, { $project: { id: "$_id", pendingOrder: 1, doneOrder: 1, _id: 0 } } ])
代码说明:
$group阶段:按name字段分组,通过$cond判断文档的status值,符合目标状态则累加1,否则累加0,以此分别统计pending和done状态的文档数量。$project阶段:将分组的_id重命名为id,并移除默认的_id字段,让结果结构和你期望的完全匹配。
执行后得到的结果格式如下:
[ { "id": "Ali", "pendingOrder": 11, "doneOrder": 10 }, { "id": "Henry", "pendingOrder": 12, "doneOrder": 20 } // 其他分组结果 ]
内容的提问来源于stack exchange,提问作者ELsssss
相关产品推荐
相关产品推荐

