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

如何在MongoDB中更新文档最内层嵌套的键名

MongoDB修改数组内错误键名方案

你可以根据你的MongoDB版本选择对应实现方案:

方案1:MongoDB 4.2及以上版本(推荐,原子操作)

直接使用带聚合管道的updateMany方法,只会匹配存在错误键名的文档,不会修改已经正确的文档2:

db.your_collection_name.updateMany(
  // 查询条件:仅匹配存在错误键名的文档
  {
    "ARCM Sum.Activity Checks.Activity Description contains > 20 word": { $exists: true }
  },
  // 聚合管道更新逻辑
  [
    {
      $set: {
        "ARCM Sum.Activity Checks": {
          $map: {
            input: "$ARCM Sum.Activity Checks",
            as: "checkItem",
            in: {
              $mergeObjects: [
                "$$checkItem",
                // 新增正确键,值为原错误键的值
                { "Activity Description contains > 20 words": "$$checkItem.Activity Description contains > 20 word" }
              ]
            }
          }
        }
      }
    },
    {
      // 删除数组元素中的错误键
      $unset: "ARCM Sum.Activity Checks.Activity Description contains > 20 word"
    }
  ]
)

注意将代码中的your_collection_name替换为你实际使用的集合名


方案2:MongoDB 4.2以下版本

通过遍历查询游标逐个更新文档:

// 找到所有包含错误键名的文档
db.your_collection_name.find(
  {
    "ARCM Sum.Activity Checks.Activity Description contains > 20 word": { $exists: true }
  }
).forEach(function(doc) {
  // 遍历Activity Checks数组的每个元素
  doc["ARCM Sum"]["Activity Checks"].forEach(function(checkItem) {
    // 存在错误键时执行替换
    if (checkItem.hasOwnProperty("Activity Description contains > 20 word")) {
      checkItem["Activity Description contains > 20 words"] = checkItem["Activity Description contains > 20 word"];
      delete checkItem["Activity Description contains > 20 word"];
    }
  });
  // 保存修改后的文档
  db.your_collection_name.save(doc);
})

操作前注意

  • 执行更新前请先执行查询语句确认匹配的文档符合预期,避免误操作:
    db.your_collection_name.find({"ARCM Sum.Activity Checks.Activity Description contains > 20 word": {$exists: true}})
    
  • 生产环境操作前请提前备份相关数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:03