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

如何在MongoDB聚合框架中从对象字段生成数组字段

MongoDB聚合提取数组对象指定字段为新数组

你可以使用MongoDB的$map操作符直接遍历tags数组,提取每个对象的v值组成新的tags_values数组,无需使用$unwind(避免拆分数组后再分组的繁琐操作)。

方案一:先添加新字段再移除原字段

适合保留原有$project逻辑的场景:

db.collection.aggregate([
  // 你的原有$project阶段
  { /* 这里放你之前的$project操作代码 */ },
  // 添加tags_values字段,提取tags数组中每个元素的v值
  {
    $addFields: {
      tags_values: {
        $map: {
          input: "$tags",
          as: "tag",
          in: "$$tag.v"
        }
      }
    }
  },
  // 移除原有的tags字段
  {
    $project: {
      tags: 0
    }
  }
])

方案二:在单个$project阶段完成

如果需要直接替换输出结构,可以在$project里直接生成目标字段:

db.collection.aggregate([
  {
    $project: {
      identificador: 1,
      tp: 1,
      fotos: 1,
      qt: 1,
      dt: 1,
      cdt: 1,
      qt_tags: 1,
      tags_values: {
        $map: {
          input: "$tags",
          as: "tag",
          in: "$$tag.v"
        }
      }
    }
  }
])

原理说明

  • $map会遍历指定的输入数组(这里是$tags),对每个元素执行in中的表达式,最终返回由所有表达式结果组成的新数组。
  • 不管tags数组包含多少个元素,该操作都能自动处理,生成对应长度的tags_values数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:16