2016-01-15 129 views
0

我想更新mongoDB中的文檔中的多個嵌套的文檔。在MongoDB中的文檔多次更新

說我的數據是:

{ 
    "_id" : "ObjectId(7df78ad8902c)", 
    "title" : "Test", 
    "img_url" : "[{s: 1, v:1}, {s: 2, v: 2}, {s: 3, v: 3}]", 
    "tags" : "['mongodb', 'database', 'NoSQL']", 
    "likes" : "100" 
} 

我想在img_url列表更新v to 200 for s = 1 and s= 2。 對於任何一個s,很容易更新v

有什麼辦法可以更新多個文件滿足一些條件。

我想:

db.test.update({ "_id" : ObjectId("7df78ad8902c"), "img_url.s": {$in : ["1", "2"]}}, {$set: { "img_url.$.v" : 200 } }); 
and 
db.test.update({ "_id" : ObjectId("7df78ad8902c"), "img_url.s": {$in : ["1", "2"]}}, {$set: { "img_url.$.v" : 200 } }, {mulit: true}); 

一些消息來源所提出的建議是不可能這樣做的。

Multiple update of embedded documents' properties

https://jira.mongodb.org/browse/SERVER-1243

我缺少的東西?

+0

的可能的複製[如何改變在一個mongodb文檔中的所有數組元素都具有一定的值?](http://stackoverflow.com/questions/32610663/how-to-change-all-the-array-elements-in-a-mongodb-document-to -a-一定值) – styvane

回答

0

對於具體的案例/例子,你在這裏。你正在指定一個_id,這意味着你只用那個特定的_id來更新一個_id。

更新img_url嘗試沒有_id;是這樣的:

db.test.update({}, {"$set":{"img_url.0":{s:1, v:400}}}, {multi:true}) 
db.test.update({}, {"$set":{"img_url.1":{s:2, v:400}}}, {multi:true}) 

0和1 img_url是在數組索引:1和s:2

,以更新基於特定條件需要設置你需要的屬性第一個論點。比方說,要更新具有由1你(假設喜歡類型爲int ...)喜歡大於100增量的所有文件:

db.people.update({ likes: {$gt:100} }, {$inc :{likes: 1}}, {multi: true}) 

希望幫助