2013-03-28 23 views
0

我已经文档:变化值

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

我怎样才能修改“身份”到“接受”,其中“状态”是“等待”和“ID”是20?

+0

您不想同时检查状态和ID吗? – Devesh 2013-03-28 12:58:37

回答

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 }) 
+0

你在哪里检查“等待”状态?如果你只检查20你可能会得到这些元素也是其中状态已经是“接受” – Devesh 2013-03-28 10:55:37

+0

db.collection.update({“_id”:......“ elements.id”:“20”},{“$设置“:{”elements。$。status“:”status“}}) – cgl 2013-10-17 12:05:18

1

你必须使用elemMatch(http://docs.mongodb.org/manual/reference/projection/elemMatch/)。要匹配状态和ID 20这两个数组的项目,可以使用$ set命令。背后使用elemMatch的原因是,它会确保这两个标准是在同一子文档匹配,返回结果

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