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

MongoDB聚合:将键值对数组转换为键+唯一值列表结构

MongoDB聚合实现数组压缩为键值唯一列表结构

针对你给出的数据结构转换需求,结合你已经用到的$group和$addToSet,可以通过完整的聚合管道来实现目标结构,具体步骤如下:

完整聚合查询

db.collection.aggregate([
  // 展开原始的fruits数组,将每个子对象转为独立文档
  { $unwind: "$fruits" },
  // 按fruit字段分组,收集对应唯一的type值到types数组
  {
    $group: {
      _id: "$fruits.fruit",
      types: { $addToSet: "$fruits.type" }
    }
  },
  // 重命名字段,将_id转为fruit,去掉原始_id字段
  {
    $project: {
      _id: 0,
      fruit: "$_id",
      types: 1
    }
  },
  // 将所有处理后的文档重新组合为fruits数组
  {
    $group: {
      _id: null,
      fruits: { $push: "$$ROOT" }
    }
  },
  // 去掉顶层的_id字段,得到最终结构
  { $project: { _id: 0 } }
])

各阶段说明

  • $unwind:把原始文档中fruits数组的每个元素拆分成单独的文档,方便后续分组操作。
  • $group(第一次):以fruit值为分组依据,用$addToSet自动去重收集对应的type值,生成types数组。
  • $project:调整文档结构,将分组用的_id(即fruit值)重命名为fruit字段,同时保留types数组。
  • $group(第二次):将所有分组后的单个文档重新聚合到fruits数组中,恢复顶层的数组结构。
  • $project:移除自动生成的_id字段,完全匹配目标格式。

如果你已经完成了前两个阶段($unwind和第一次$group),只需要执行后续的$project、第二次$group和最后一个$project就能得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29