2015-02-12 95 views
1
{ 
    "__v" : 2, 
    "_id" : ObjectId("54dc4fd10ac1f6a066a0646c"), 
    "desc" : "test1", 
    "lists" : [ 
     { 
      "index" : 1, 
      "text" : "__point", 
      "_id" : ObjectId("54dc4fda0ac1f6a066a0646d"), 
      "createdAt" : ISODate("2015-02-12T07:01:46.390Z") 
     }, 
     { 
      "index" : 2, 
      "text" : "__point", 
      "_id" : ObjectId("54dc4fdd0ac1f6a066a0646e"), 
      "createdAt" : ISODate("2015-02-12T07:01:49.668Z") 
     } 
    ], 
    "name" : "test" } 

測試數組看起來像這樣。我想添加'category'字段並在檢查_id的列表中添加值'0'。PHP MongoDB更新不起作用

我試圖

$collection->update(array('_id' => new MongoId("54dc4fd10ac1f6a066a0646c")),array('$set' => array(new MongoId("54dc4fda0ac1f6a066a0646d").".lists.category" => '0'))); 

這樣,但它不工作。

+0

這可以幫助你做到這一點。 http://stackoverflow.com/questions/5646798/mongodb-updating-subdocument 斯科特 – 2015-02-12 10:09:56

回答

0
set third parameter of update to true. 
i think there is some problem in finding which embedded document for updated. 
try this one might be work. 
$collection->update(array('_id' => new MongoId("54dc4fd10ac1f6a066a0646c"), 'lists._id' => "54dc4fda0ac1f6a066a0646d"), array('$set' => array("lists.$.category" => '0')), true); 
0

您好我不知道更多關於PHP,但你可以從下面的腳本

db.collectionName.find({ 
    "lists": { 
    "$exists": true 
    } 
}).forEach(function(data){ 
    for(vari=0;i<data.lists.length;i++){ 
    db.collectionName.update({ 
     "_id": data._id, 
     "lists.index": data.lists[ 
      i 
     ].index 
    }, 
    { 
     "$set": { 
      "lists.$.category": 0 
     } 
    }, 
    true, 
    true); 
    } 
})