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

MongoDB如何给嵌套数组元素新增取自同元素其他字段的字段

解决方案

你之前写法的核心问题:直接对数组字段做嵌套赋值时,$myObjects.nmbr 会提取数组中所有元素的nmbr字段组成新数组,所以每个元素的id都被赋值为了整个nmbr数组,而非对应元素本身的nmbr值。

你可以使用$map遍历myObjects数组的每一个元素,为单个元素新增id字段,正确聚合语句如下:

db.collection.aggregate([
  {
    $addFields: {
      myObjects: {
        $map: {
          input: "$myObjects",
          as: "item",
          in: {
            $mergeObjects: [
              "$$item",
              { id: "$$item.nmbr" }
            ]
          }
        }
      }
    }
  }
])

说明:

  • $map 负责遍历myObjects数组,每个遍历到的元素临时命名为item
  • $mergeObjects 会合并原元素的所有字段和新增的id字段,不会丢失原有字段

如果你需要直接修改集合内的原始数据(而非仅查询得到转换后的结果),MongoDB 4.2及以上版本可以直接使用带聚合管道的更新语句:

db.collection.updateMany(
  {}, // 匹配条件,空代表匹配集合内所有文档
  [
    {
      $set: {
        myObjects: {
          $map: {
            input: "$myObjects",
            as: "item",
            in: {
              $mergeObjects: [
                "$$item",
                { id: "$$item.nmbr" }
              ]
            }
          }
        }
      }
    }
  ]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:04