MongoDB如何将不同文档同字段的数组合并为单个数组
MongoDB 跨文档合并同名字段数组实现方案
你之前使用$concat、$group未得到预期结果,核心原因是对操作符的适用场景理解有偏差:$concat仅支持同一文档内的数组合并,无法跨文档累加值;直接在$group中push数组字段会得到二维嵌套数组,不是你需要的一维平铺结构。
正确实现步骤
通过聚合管道的$unwind+$group组合即可实现需求,完整命令如下:
db.addresses.aggregate([ // 拆分所有文档的addresses数组,将每个数组元素转为独立的单值文档 { $unwind: "$addresses" }, // 对全集合文档做无差别分组,将所有拆分出的地址值累加进目标数组 { $group: { _id: null, allAddresses: { $push: "$addresses" } } }, // 移除聚合默认返回的_id字段,仅保留目标结果 { $project: { _id: 0, allAddresses: 1 } } ])
补充说明
- 上述命令会完全保留原数组中的重复值、以及元素的原有排列顺序,和你给出的预期结果结构完全一致。
- 如果后续需要合并后去重,只需要将
$group阶段的$push替换为$addToSet即可,注意$addToSet不会保证元素的返回顺序。 - 如果需要合并指定范围的文档,可以在管道最前面加
$match阶段做前置过滤,减少全表遍历的性能消耗。
内容的提问来源于stack exchange,提问作者83hru2
相关产品推荐
相关产品推荐

