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

使用runCommand执行update时$set无法复制字段值到新属性的问题

问题原因与解决方法

你当前的写法问题在于,直接在$set的嵌套对象里使用$username、$password这种字段引用时,MongoDB会把它们当成普通字符串字面量处理,而不是解析为文档中已有的字段值。要实现引用现有字段构建新对象的需求,必须使用聚合管道形式的更新操作,这是MongoDB 4.2及以上版本支持的特性。

正确的runCommand更新命令如下:

{
  "update": "dummyCollection",
  "updates": [
    {
      "q": {
        "username": { "$exists": true },
        "password": { "$exists": true }
      },
      "u": [
        {
          "$set": {
            "users.dummyUser": {
              "username": "$username",
              "password": "$password"
            }
          }
        }
      ],
      "multi": true
    }
  ]
}

关键修改点:

  • 把原来u字段的对象值改成一个聚合管道数组,数组里包含$set聚合阶段
  • 在聚合管道的$set中,$username和$password会被正确解析为当前文档对应字段的实际值,而不是字符串字面量

这样执行后,就能将每个符合条件的文档里的username和password值,正确填充到users.dummyUser对象中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:02:07