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

MongoDB聚合操作:如何将文档数组转换为指定字段值的数组

MongoDB 数组字段聚合转换方案

你可以通过以下聚合管道实现需求,核心是使用$map操作符遍历嵌套数组提取指定字段:

db.collection.aggregate([
  {
    $set: {
      "field2.subfield2": {
        $map: {
          input: "$field2.subfield2",
          as: "item",
          in: "$$item.name"
        }
      }
    }
  }
])

代码说明

  • 这里使用$set阶段(MongoDB 4.2及以上版本支持,低版本可以替换为$addFields,效果完全一致)直接覆盖原field2.subfield2字段,不会改动文档内的其他字段
  • $map是数组遍历转换操作符:
    • input参数指定要处理的原数组路径
    • as参数定义数组遍历过程中单个元素的别名
    • in参数定义每个元素转换后的返回值,这里直接返回每个元素的name属性值

如果你需要将转换后的结果永久更新到原集合,可以在管道末尾追加$out阶段指定原集合名(操作前建议先备份数据):

db.collection.aggregate([
  // 上述$set转换阶段
  { $out: "collection" }
])

可选优化

如果需要过滤掉数组中没有name字段的无效元素,可以在$map外层嵌套$filter:

{
  $set: {
    "field2.subfield2": {
      $filter: {
        input: {
          $map: {
            input: "$field2.subfield2",
            as: "item",
            in: "$$item.name"
          }
        },
        as: "nameVal",
        cond: { $ne: ["$$nameVal", null] }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:05