嵌套对象数组中的值"/>
mongodb 更新嵌套对象数组中的值
我想更新 3 层深嵌套的对象数组中的标志。
我有这个年龄数组:
[20, 25]
我想为那些有 flag: 1
和 type: students
ages: 20 or 25
这是我的用户收藏:
{
"_id": "wef324DGSshf",
"userTypes": [
{
"type": "students",
"users": [
{
"name": "John",
"age": 20,
"flag": 0
},
{
"name": "Mike",
"age": 25,
"flag": 0
}
]
},
{
"type": "students",
"users": [
{
"name": "Henry",
"age": 40,
"flag": 0
},
{
"name": "Nick",
"age": 25,
"flag": 0
}
]
},
{
"type": "teachers",
"users": [
{
"name": "Kim",
"age": 20,
"flag": 0
},
{
"name": "Charles",
"age": 25,
"flag": 0
}
]
}
]
}
更新后我期待这样的回应:
{
"_id": "wef324DGSshf",
"userTypes": [
{
"type": "students",
"users": [
{
"name": "John",
"age": 20,
"flag": 1
},
{
"name": "Mike",
"age": 25,
"flag": 1
}
]
},
{
"type": "students",
"users": [
{
"name": "Henry",
"age": 40,
"flag": 0
},
{
"name": "Nick",
"age": 25,
"flag": 1
}
]
},
{
"type": "teachers",
"users": [
{
"name": "Kim",
"age": 20,
"flag": 0
},
{
"name": "Charles",
"age": 25,
"flag": 0
}
]
}
]
}
到目前为止我尝试过的是这个查询:
Users.update({},
{
"$set": {
"userTypes.$[ut].users": {
"flag": 1
}
}
},
{
arrayFilters: [
{
"ut.type": 'students',
"ut.age": {$in: [20, 25]}
}
],
multi: true
});
我的解决方案没有更新所需的记录,任何人都可以帮助我针对这种情况进行正确的查询吗?
回答如下:因为你有两层数组,每层都有一个条件,你需要在 arrayFilters
:
db.collection.update({},
{
"$set": {
"userTypes.$[ut].users.$[user].flag": 1
}
},
{
arrayFilters: [
{
"ut.type": "students"
},
{
"user.age": {
$in: [
20,
25
]
}
}
],
multi: true
})
在游乐场示例中查看它是如何工作的
更多推荐
mongodb 更新嵌套对象数组中的值
发布评论