更改MongoDB阵列中嵌套文档中的值

时间:2013-03-28 08:04:53

标签: mongodb

我有文件:

{
    "_id" : ObjectId("5152ba0708c164359d5ca616"),
        "info": "Some interesting information.",
    "elements" : [
        {
            "status" : "accepted",
            "id" : "10"
        },
                {
            "status" : "waiting",
            "id" : "20"
        },
                {
            "status" : "accepted",
            "id" : "30"
        }
    ]
}

如何将“状态”修改为“已接受”,其中“状态”为“等待”且“身份”为20?

2 个答案:

答案 0 :(得分:3)

使用位置(“$”)运算符。

// single
db.collection.update({ _id: ..., "elements.id": "20" }, { $set: { "elements.$.status": "status" } })

// all
db.collection.update({ "elements.id": "20" }, { $set: { "elements.$.status": "status" } }, { multi: true  })

答案 1 :(得分:1)

你必须使用elemMatch(http://docs.mongodb.org/manual/reference/projection/elemMatch/)。要匹配数组的项目,如status和id 20,则可以使用$ set命令。使用elemMatch的原因是它将确保在返回结果之前两个条件在同一子文档上匹配

db.CollectionName.update({"_id" : ObjectId("5152ba0708c164359d5ca616") , "elements" : { "$elemMatch : {"status" : "waiting" , "Id" : "20"}}},{ $set : {"elements.$.status" : "accepted"}});