簡體   English   中英

更新 MongoDB 中嵌套對象數組中 Object 中鍵的值

[英]Update value of key in Object in nested array of objects in MongoDB

我正在嘗試更新“array1.array2._id”的數據:ObjectId(“627a6fab60dc3c523b396af1”) 並將名稱設置為 John 但它正在將所有 array2 的第一個元素的名稱更新為 John。

db.getCollection('tests')
.updateOne({ "array1.array2._id": ObjectId("627a6fab60dc3c523b396af1") },{ $set: { "array1.$[].array2.$.name" : "John" } })

{
    "_id" : ObjectId("627a6fab60dc3c523b396aec"),
    "array1" : [ 
        {
            "array2" : [ 
                {
                    "_id" : ObjectId("627a6fab60dc3c523b396af1"),
                    "name" : "test"
                }, 
                {
                    "_id" : ObjectId("627a6fab60dc3c523b396af2"),
                    "name" : "ABC"
                }
            ],
            "_id" : ObjectId("627a6fab60dc3c523b396aed")
        }, 
        {
            "array2" : [ 
                {
                    "_id" : ObjectId("627a6fab60dc3c523b396af3"),
                    "name" : "XYZ"
                }, 
                {
                    "_id" : ObjectId("627a6fab60dc3c523b396af4"),
                    "name" : "Testing"
                }
            ],
            "_id" : ObjectId("627a6fab60dc3c523b396aee")
        }
    ]
}

基於@R2D2 的這個很好的回答,你可以這樣做:

db.collection.update({
  "array1.array2._id": ObjectId("627a6fab60dc3c523b396af1")
},
{
  $set: {
    "array1.$[].array2.$[y].name": "John"
  }
},
{
  arrayFilters: [
    {
      "y._id": ObjectId("627a6fab60dc3c523b396af1")
    }
  ]
})

正如您在這個游樂場示例中看到的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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