MongoDB如何合并多个同结构文档并对同名字段求和生成单文档
MongoDB 集合全字段求和合并实现方案
场景说明
现有集合存储3条结构一致的文档:
{ "num" : 10, "count" : 1 } { "num" : 20, "count" : 2 } { "num" : 30, "count" : 3 }
需要对所有文档的同名字段分别求和,合并输出单条结果,预期结果如下:
{ "num" : 60, "count" : 6 }
具体实现
直接调用MongoDB的聚合管道,通过$group阶段完成全量文档的字段累加即可,执行命令如下:
// 替换成你实际的集合名称 db.test_collection.aggregate([ { $group: { _id: null, num: { $sum: "$num" }, count: { $sum: "$count" } } }, { $project: { _id: 0 } } ])
参数说明
$group阶段的_id: null代表不对文档做拆分,把集合内所有文档归为同一组做聚合计算;每个字段对应配置$sum累加器,传入$字段名格式的字段引用,就会自动遍历组内所有文档累加对应字段的值。- 后续的
$project阶段是可选配置,作用是去掉聚合默认返回的_id字段,让输出结构和预期结果完全对齐。
如果集合字段是动态变化、无法提前枚举的,可以先调用db.集合名.findOne()拉取单条样本文档,遍历提取所有数值类字段名,动态拼接$group的求和配置即可,核心逻辑和固定字段场景完全一致。
内容的提问来源于stack exchange,提问作者Anil Yadav
相关产品推荐
相关产品推荐

