0

我有文件:

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

如何将“status”修改为“accepted”,其中“status”为“waiting”,“id”为 20?

4

2 回答 2

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  })
于 2013-03-28T09:39:03.550 回答
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"}});
于 2013-03-28T09:00:25.733 回答