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

MongoDB 6.x嵌套文档数组字段重命名迁移方案咨询

MongoDB 6.x 嵌套字段及数组内嵌套字段重命名迁移方案

完整迁移代码

db.yourCollection.updateMany(
  {}, // 匹配所有文档,如需仅处理特定文档可添加过滤条件
  [
    // 1. 迁移顶层 assignment.carrier.name 到 companyName
    {
      $set: {
        "assignment.carrier.companyName": "$assignment.carrier.name"
      }
    },
    // 2. 迁移 eventLog 数组内的 assignment.carrier.name 到 companyName
    {
      $set: {
        eventLog: {
          $map: {
            input: "$eventLog",
            as: "log",
            in: {
              $mergeObjects: [
                "$$log",
                {
                  $cond: {
                    if: { $ne: ["$$log.assignment", undefined] },
                    then: {
                      assignment: {
                        $mergeObjects: [
                          "$$log.assignment",
                          {
                            carrier: {
                              $mergeObjects: [
                                "$$log.assignment.carrier",
                                { companyName: "$$log.assignment.carrier.name" }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    else: {}
                  }
                }
              ]
            }
          }
        }
      }
    },
    // 3. 移除所有旧的 name 字段
    {
      $unset: [
        "assignment.carrier.name",
        "eventLog.assignment.carrier.name"
      ]
    }
  ]
)

代码说明

  • 顶层字段迁移:直接通过$set赋值,点路径运算符在顶层嵌套字段中可正常生效,将原name字段的值复制到新的companyName字段。
  • 数组内字段迁移:
    • 用$map遍历eventLog数组的每一个元素;
    • 用$mergeObjects保留日志元素的原有结构,仅对包含assignment的元素修改嵌套字段;
    • 逐层合并assignment和carrier对象,确保原有字段不丢失的同时添加新字段。
  • 删除旧字段:通过$unset一次性移除顶层和数组内的旧name字段,MongoDB会自动遍历数组所有元素完成删除。

常见问题说明

如果之前尝试直接在$map中用点路径赋值(如"$$log.assignment.carrier.companyName": "$$log.assignment.carrier.name")会失败,原因是在数组映射的上下文里,无法直接通过点路径修改嵌套对象的字段,必须使用$mergeObjects来合并对象结构实现字段添加/修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:43:14