簡體   English   中英

Mongodb 通過鍵值更新嵌套數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM