You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:01:22