[英]How to update the values of a “Key-Value” pair in a nested array in MongoDB without adding a new element
[英]Mongodb update nested array by key-value
如何通過列表鍵值更新嵌套數組?
{
"_id": "mainId",
"events": [{
"id": 1,
"profile": 10,
} {
"id": 2,
"profile": 10,
} {
"id": 3,
"profile": 20,
}
]
}
我有一個要更新的列表:
var list = {id: 2, newval: 222}, {id: 3, newval: 333}
如何在一個查詢中進行更新? 還是在 MongoDB 中會像一個循環?
for({id, val} in list){
update({_id: "mainId", events.$.id: id}, {setField: {events.$.profile: val}})
}
如果您有事件數組的副本,您可以在代碼中進行必要的更新,然后在單個查詢中將更新后的數組發送到 MongoDB。 像這樣的東西
db.Test.updateOne({_id: "mainId"}, {$set: { "events": [{id: 1, profile: 222}, {id: 2, profile: 10}, {id: 3, profile: 333}] } } )
如果您沒有 events 數組的副本,則可以執行批量操作。 就像是
db.Test.bulkWrite(
[
{ updateOne : {
"filter": {_id: "mainId", "events.id": 1},
"update": { $set: { "events.$.profile": 222 } }
}
},
{ updateOne : {
"filter": {_id: "mainId", "events.id": 3},
"update": { $set: { "events.$.profile": 333 }}
}
}
]
)
有關 bulkWrite 的更多信息,請參閱 MongoDB 文檔: https://docs.mongodb.com/manual/core/method-write-operations/#bulkwrite
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.