[英]MongoDb update multiple objects from array
我有一個包含以下字段的文檔:
{
"_id": 1,
"codes": [
{"name": "code1", "active": null, "disabled": false},
{"name": "code2", "active": null, "disabled": false},
{"name": "code3", "active": null, "disabled": false},
{"name": "code4", "active": null, "disabled": false},
{"name": "code5", "active": null, "disabled": false},
{"name": "code6", "active": null, "disabled": false}
]
}
有什么方法可以只更新name
值等於“ code2”,“ code3”和“ code4”的對象?
例如:
db.collection.update(
{"_id": 1},
{
$set: {
"codes": [
{"name": "code2", "active": false, "disabled": true},
{"name": "code3", "active": true, "disabled": false},
{"name": "code4", "active": null, "disabled": true}
]
}
}
)
預期結果:
{
"_id": 1,
"codes": [
{"name": "code1", "active": null, "disabled": false},
{"name": "code2", "active": false, "disabled": true},
{"name": "code3", "active": true, "disabled": false},
{"name": "code4", "active": null, "disabled": true},
{"name": "code5", "active": null, "disabled": false},
{"name": "code6", "active": null, "disabled": false}
]
}
實際結果:
{
"_id": 1,
"codes": [
{"name": "code2", "active": false, "disabled": true},
{"name": "code3", "active": true, "disabled": false},
{"name": "code4", "active": null, "disabled": true}
]
}
您無法在一個查詢中實現此目的,但是可以循環執行更新數組,並針對代碼數組中的元素匹配條件執行更新:
var updatesArray = [
{"name": "code2", "active": false, "disabled": true},
{"name": "code3", "active": true, "disabled": false},
{"name": "code4", "active": null, "disabled": true}
]
updatesArray.forEach(function(newCode){
db.getCollection("collection").update(
{_id:1},
{$set:{
"codes.$[subcode].active":newCode.active,
"codes.$[subcode].disabled":newCode.disabled}
},
{ multi: true,
arrayFilters: [ { "subcode.name": newCode.name } ]
}
)
})
使用此命令來實現
db.collection.update( {
"_id": 1,
"codes.name":{$in:{"code2","code3","code4"}}
},{$set:{"codes.$.active":true}})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.