我有文件:
{
"_id" : ObjectId("5152ba0708c164359d5ca616"),
"info": "Some interesting information.",
"elements" : [
{
"status" : "accepted",
"id" : "10"
},
{
"status" : "waiting",
"id" : "20"
},
{
"status" : "accepted",
"id" : "30"
}
]
}
如何将“状态”修改为“已接受”,其中“状态”为“等待”且“身份”为20?
答案 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"}});