【问题标题】:Multiple update in a document in MongoDBMongoDB中文档的多次更新
【发布时间】:2016-01-15 07:08:11
【问题描述】:

我正在尝试更新 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

我错过了什么吗?

【问题讨论】:

标签: mongodb


【解决方案1】:

对于您在此处的特定案例/示例。您正在指定一个 _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 的文档,您会按 1 递增(假设喜欢的类型是 int...):

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多