我正在尝试将属性添加到嵌套数组中
var names = [...]; // long list of names, omitted for the sake of brevity
var isNotCriteria = {
"Persons.Name": {
$nin: names
}
}
var isNotUpdateStatement = {
$set: {
"Persons.$.IsVerified" : false
}
}
db["teams"].updateMany(isNotCriteria, isNotUpdateStatement);
teams
文档结构的示例:
{
"_id": "32bace05-2742-4bee-9d56-6e4f168e742b",
"Name" : "TeamA",
"Persons" : [{
"_id" : "5794aa39-8ebf-421d-a28b-ab34d1ccfb2h",
"Name" : "Person 1"
}, {
"_id" : "42602118-cc4a-4121-b869-365d6f73e1d0",
"Name" : "Person 2"
}]
}
但是,执行会导致异常:
位置运算符未从查询中找到所需的匹配项。 未经扩展的更新:Persons。$。IsVerified
我无法理解失败的原因,因为如果我将条件查询从$nin
切换到$in
,它将起作用。
如果我使用以下条件运行find
,则会看到结果:
db["teams"].find(isNotCriteria);
任何想法我该如何解决?
答案 0 :(得分:0)
问题实际上是没有teams
数组(或数组为空)的Persons
个文档。
我将条件查询更改为
var isNotCriteria = {
$and: [
{
"Persons": {
$exists: true,
$not: {$size : 0}
},
"Persons.Name" : {
$nin: names
}
}
]
}
现在它可以正常工作了。