我正在尝试在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
我错过了什么吗?
答案 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} )
希望有所帮助