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

MongoDB聚合框架如何合并数组中gugun字段值相同的对象

MongoDB聚合合并guguns数组同gugun字段对象方案

你可以通过$unwind+$group+数组重构的聚合管道实现需求,具体步骤如下:

完整聚合管道

[
  // 展开guguns数组为单条文档
  {
    "$unwind": "$guguns"
  },
  // 按原始文档ID+gugun名称分组,合并同gugun的属性
  {
    "$group": {
      "_id": {
        "root_id": "$_id",
        "gugun": "$guguns.gugun"
      },
      // 保留原始文档所有顶级字段
      "root": { "$first": "$$ROOT" },
      // 合并同gugun下的所有字段,同名字段默认后出现的覆盖先出现的
      "merged_gugun_item": { "$mergeObjects": "$guguns" }
    }
  },
  // 按原始文档ID重新分组,重构guguns数组
  {
    "$group": {
      "_id": "$_id.root_id",
      "root": { "$first": "$root" },
      "guguns": { "$push": "$merged_gugun_item" }
    }
  },
  // 还原文档结构,替换合并后的guguns数组
  {
    "$replaceRoot": {
      "newRoot": {
        "$mergeObjects": [
          "$root",
          { "guguns": "$guguns" }
        ]
      }
    }
  }
]

逻辑说明

  • $unwind阶段将数组拆分为独立条目,方便后续分组处理
  • 第一次$group的分组键同时包含原始文档_id和gugun字段,确保只会合并同一个原始文档下相同gugun的条目,不会跨文档合并
  • $mergeObjects会自动合并同gugun下所有存在的字段,符合你当前互补字段的合并需求;如果同gugun下存在同名字段需要累加求和,可将对应字段改为$sum算子统计,例如:
    "first_count": { "$sum": "$guguns.first_count" }
    
  • 最后通过$replaceRoot还原原始文档结构,自动保留所有顶级字段,无需手动逐个声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03