簡體   English   中英

MongoDb從數組更新多個對象

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

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