MongoDB中的文档中的多个更新

时间:2016-01-15 07:08:11

标签: 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"
}

我想更新v to 200 for s = 1 and s= 2列表中的img_url。 对于任何单个v,都可以轻松更新s

有没有办法更新满足某些标准的多个文档。

我试过了:

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

对于您在此处的具体案例/示例。您正在指定_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})
img_url中的

0和1是s:1和s:2

的数组索引

为了根据特定条件进行更新,您需要在第一个参数上设置所需的属性。例如,要更新所有喜欢大于100的增量的文件(假设喜欢的类型是int ...):

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

希望有所帮助