Mongodb 位置运算符不匹配



我不得不在这里缺少一些小细节。我的目标是将所有活动Not Equal更新为ObjectId("5e3e3c046e76599afe96d50f")

我正在尝试进行以下查询:

db.getCollection("projects").updateMany(
{
"activities._id": { $ne: ObjectId("5e3e3c046e76599afe96d50f") }
},
{
$set: { "activities.$.totalPointsPossible": 5 }
})

我得到以下错误:

WriteError({
"index" : 0,
"code" : 2,
"errmsg" : "The positional operator did not find the match needed from the query.",
"op" : {
"q" : {
"activities._id" : {
"$ne" : ObjectId("5e3e3c046e76599afe96d50f")
}
},
"u" : {
"$set" : {
"activities.$.totalPointsPossible" : 5
}
},
"multi" : true,
"upsert" : false
}
})

但是,如果我进行此查询:

db.getCollection("projects").find({ "activities._id": { $ne: ObjectId("5e3e3c046e76599afe96d50f") } })

我收到了预期的返回文件。我不完全确定.find()是如何与activities_id字段匹配的,然后位置运算符不匹配?

架构

{
title: {
type: String,
required: [true, "Title is required for Project"]
},
...
activities: [
{
name: {
type: String,
required: true
}
...
]
}
],
createdOn: { type: Date, default: Date.now }
}

文档中缺少此部分:

如果查询使用否定运算符(如$ne、$not或$nin(与数组匹配,则不能使用位置运算符更新此数组中的值。

但是,如果查询的否定部分在$elemMatch表达式内部,则可以使用位置运算符来更新此字段。

https://docs.mongodb.com/manual/reference/operator/update/positional/#negations

相关内容

  • 没有找到相关文章

最新更新