2013-03-28 24 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"}});