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

MongoDB聚合管道如何展平siteitems字段的嵌套数组?

MongoDB聚合分组后展平嵌套数组的解决方案

需求:按group字段分组,将site与items的键拼接后生成一维数组,当前聚合管道返回的siteitems为嵌套数组,需修改实现展平。

文档集合

[
  {
    "_id": { "$oid": "64ddcb04756827cb9d4633ba" },
    "site": "site1",
    "group": "env1",
    "items": {
      "x": { "release": "true" },
      "y": { "release": "true" },
      "z": { "release": "true" }
    }
  },
  {
    "_id": { "$oid": "64ddcb04756827cb9d4633cd" },
    "site": "site2",
    "group": "env1",
    "items": {
      "x": { "release": "true" },
      "y": { "release": "true" },
      "z": { "release": "true" }
    }
  }
]

当前输出(嵌套数组)

{
  "_id": "env1",
  "siteitems": [["site1x", "site1y", "site1z"], ["site2x", "site2y", "site2z"]]
}

当前使用的聚合管道

[
  {
    $group: {
      _id: "$group",
      siteitems: {
        $push: {
          $map: {
            input: { $objectToArray: "$items" },
            as: "item",
            in: { $concat: ["$site", "$$item.k"] }
          }
        }
      }
    }
  }
]

修改方案(两种实现方式)

方式一:通过$reduce展平嵌套数组

保留原分组逻辑,后续添加$project阶段,利用$reduce遍历嵌套数组并通过$concatArrays合并为一维数组:

[
  {
    $group: {
      _id: "$group",
      siteitems: {
        $push: {
          $map: {
            input: { $objectToArray: "$items" },
            as: "item",
            in: { $concat: ["$site", "$$item.k"] }
          }
        }
      }
    }
  },
  {
    $project: {
      siteitems: {
        $reduce: {
          input: "$siteitems",
          initialValue: [],
          in: { $concatArrays: ["$$value", "$$this"] }
        }
      }
    }
  }
]

方式二:先拆分再分组(更直观)

先将items对象转为数组并拆分为单条文档,再按group分组拼接字符串:

[
  {
    $addFields: {
      itemsKeys: { $objectToArray: "$items" }
    }
  },
  {
    $unwind: "$itemsKeys"
  },
  {
    $group: {
      _id: "$group",
      siteitems: {
        $push: { $concat: ["$site", "$itemsKeys.k"] }
      }
    }
  }
]

修改后输出(一维数组)

{
  "_id": "env1",
  "siteitems": ["site1x", "site1y", "site1z", "site2x", "site2y", "site2z"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:56:12