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

如何在MongoDB中合并集合所有文档的同名字段数组

MongoDB 合并全集合同名字段数组为一维数组的实现方法

你可以通过MongoDB聚合管道快速实现该需求,以下是两种常用实现方案:

方案1:全版本兼容实现

该方案支持所有MongoDB版本,适合小数据集场景:

db.你的集合名.aggregate([
  // 拆分每个文档的categories数组为独立元素
  { $unwind: "$categories" },
  // 全局分组合并所有元素
  {
    $group: {
      _id: null,
      result: { $push: "$categories" }
    }
  },
  // 移除不需要的_id字段
  { $project: { _id: 0 } }
])

执行后会直接返回你需要的一维数组结构:

{ "result" : ["a", "b", "c", "d", "e", "f", "g", "h", "i"] }

方案2:高性能实现(MongoDB 4.4+ 支持)

该方案不需要拆分数组,大集合场景下性能远高于方案1:

db.你的集合名.aggregate([
  // 先把所有文档的categories数组合并为二维数组
  {
    $group: {
      _id: null,
      tempArr: { $push: "$categories" }
    }
  },
  // 把二维数组拍平为一维
  {
    $project: {
      _id: 0,
      result: {
        $reduce: {
          input: "$tempArr",
          initialValue: [],
          in: { $concatArrays: ["$$value", "$$this"] }
        }
      }
    }
  }
])

注意事项

  • 如果需要合并结果自动去重,把上述代码中的$push替换为$addToSet即可
  • 如果需要保留重复元素,使用默认的$push即可

内容的提问来源于stack exchange,提问作者Nikolay Khvan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:04