如何在MongoDB查询结果中添加代表总数值的totalCount字段
MongoDB聚合新增全局总和字段解决方案
核心思路:在原有按status分组统计单状态数量的基础上,对所有分组的count值求和,再将总和字段追加到每一条结果文档中即可。
方案1:MongoDB 5.0及以上版本(推荐,性能最优)
直接在原有聚合管道后新增$setWindowFields窗口函数阶段实现,无需修改原有分组逻辑:
[ {$group: { _id: '$status', count: {$sum: NumberInt(1)} }}, // 新增窗口函数阶段,计算所有文档的count总和 { $setWindowFields: { partitionBy: null, output: { totalCount: { $sum: "$count", window: { documents: ["unbounded", "unbounded"] } } } } } ]
方案2:兼容MongoDB 4.4及更低版本
如果MongoDB版本不支持窗口函数,可以通过二次分组存储结果、求和后展开的方式实现:
[ {$group: { _id: '$status', count: {$sum: NumberInt(1)} }}, // 存储所有分组结果,同时计算全局总和 { $group: { _id: null, statusList: {$push: "$$ROOT"}, totalCount: {$sum: "$count"} } }, // 展开分组结果回到单条文档结构 {$unwind: "$statusList"}, // 合并字段输出最终结果 { $replaceRoot: { newRoot: { $mergeObjects: ["$statusList", {totalCount: "$totalCount"}] } } } ]
两种方案运行后均可得到你预期的输出结果,版本满足要求的前提下优先使用方案1,避免二次分组和展开的性能开销。
内容的提问来源于stack exchange,提问作者Mehedi Salah
相关产品推荐
相关产品推荐

