带有聚合管道的 mongodb 更新操作导致错误代码 14

Dĵ *_*ΛψΚ 6 mongodb

我正在尝试用文档的另一个字段的值更新一个字段的值。mongodb 文档说通过使用这里描述的聚合管道是可能的。

即使来自文档的示例代码也会导致TypeMismatch代码 14 错误。

命令:

db.members.update(
   { },
   [
      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ] } },
      { $unset: [ "misc1", "misc2" ] }
   ],
   { multi: true }
)
Run Code Online (Sandbox Code Playgroud)

结果:

WriteCommandError({
    "operationTime" : Timestamp(1561779602, 1),
    "ok" : 0,
    "errmsg" : "BSON field 'update.updates.u' is the wrong type 'array', expected type 'object'",
    "code" : 14,
    "codeName" : "TypeMismatch",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1561779602, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

这是 mongodb 中的实际错误还是我遗漏了什么?

Rav*_*rti 11

我认为您面临的是 mongodb 版本问题。

根据官方文档:

使用聚合管道更新

MongoDB 4.2开始,db.collection.update()可以使用聚合管道进行更新。管道可以由以下阶段组成:

  • $addFields 和它的别名 $set
  • $project 和它的别名 $unset
  • $replaceRoot和它的别名$replaceWith

您可以看到mongodb 版本 4.2提供了此支持,这就是它向您抛出该错误的原因。