2017-10-09 77 views
0

我似乎无法弄清楚如何更新子数组内的单个元素。我想更新images > 59db1c3654819952005897 > sort为5更新MongoDB数组子元素字段

"_id" : 34, 
"images": [ 
     { 
      "59db1c3654819952005897": { 
       "name": "1024x1024.png", 
       "size": "19421", 
       "sort": 2 
      } 
     }, 
     { 
      "59db1c3652cda581935479": { 
       "name": "200x200.png", 
       "size": "52100", 
       "sort": 3 
      } 
     } 
    ] 

这是我做过尝试,但没有工作:

updateOne(['_id' => 34], ['$set' => ["images.59db1c3654819952005897.sort" => 5]]) 

updateOne(['_id' => 34], ['$set' => ["images.$.59db1c3654819952005897.sort" => 5]]) 

回答

1

当使用positional $ operatordot notation更新嵌入文档领域,你需要在查询中包含数组,否则它将无法工作。在上述情况下,修订更新操作将为

db.collection.updateOne(
    { 
     "_id": 34, 
     "images.59db1c3654819952005897": { "$exists": true } // <-- include array in query 
    }, 
    { 
     "$set": { 
      "images.$.59db1c3654819952005897.sort": 5 
     } 
    } 
)