我正在尝试用文档的另一个字段的值更新一个字段的值。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提供了此支持,这就是它向您抛出该错误的原因。