2014-04-27 62 views
0

我需要更新都看到值0〜1 使用蒙戈和PHP作爲陣列

enter code herearray (
    '_id' => new MongoId("5357c023dd34bcc9298b456e"), 
    '_type' => 
    array (
    '0' => 'Altibbi_Mongo_MemberNotification', 
), 
    'member_id' => '53068', 
    'notification_count' => new MongoInt32(30), 
    'notifications' => 
    array (
    '0' => 
    array (
     'actor_id' => '0', 
     'notification_type' => 'badge_top', 
     'date_added' => '2014-04-23 16:29:07', 
     'seen' => '0', 
    ), 
    '1' => 
    array (
     'actor_id' => '0', 
     'notification_type' => 'badge_country', 
     'date_added' => '2014-04-24 08:32:55', 
     'seen' => '1', 
    ) 
), 
) 

我需要幫助解決我使用$問題就只更新單個第一值 我使用$每它不會在所有

+0

哪個問題?你爲什麼期望它首先工作?你可以參考你在這裏試圖使用的功能手冊嗎? – hakre

+0

$ this-> update(array('member_id'=>「53068」,「notifications.seen」=>「0」), array('$ set'=> array('notification_count'=> 0,'notifications 。。。''=>「1」)); –

回答

0

positional $操作,你要使用的工作將只更新是從您的更新語句的查詢側匹配第一元素。這是目前通過設計並在文檔中提到的。

爲了更新多個位置,你必須:對文檔

  1. 發出多條更新語句,直到修改後的計數返回爲0。

  2. 檢索文檔和修改的每個元素數組來設置你的新值。

的第二方法的一個典型的編碼的例子是沿着線:

var doc = db.collection.findOne({ "member_id": "53068" }) 

for (var x = 0; x < doc.notifications.length; x++) { 
    if (doc.notifications[x].seen == 0) { 
     var obj = {}; 
     obj["notifications." + x] = 1; 
     db.collection.update(
      { "member_id": "53068" }, 
      { "$set": obj } 
     ); 
    } 
} 

$each操作者你指的是用於指定多個陣列元件與其他運營商如$push$addToSet使用這些在這裏不適用,因爲那些是關於創造新元素的。