2012-03-21 140 views
1

如果選擇器(第一參數)在集合中選擇多個文檔,MongoDB是否支持多文檔更新?MongoDB中的多文檔更新問題

在下面的示例中,第一個工作正常,因爲它只選擇特定文檔並修改zip值。

雖然在第二種情況下收集$地址有多個文件,其中'家'=>'加拿大',它不會更新任何東西。

有人可以幫我嗎?

$addresses->update(array('_id' => new MongoId('4f69de380c211d6c21000001')), 
       array('$set' => array('zip' => 20))); 

$addresses->update(array('home' => 'canada')), 
       array('$set' => array('zip' => 20))); 

編輯:

等效的JavaScript命令

db.addresses.update({home: "canada"}, {$set: {zip: 20}}) 

更新拉鍊第一次遇到匹配的價值,這是預期的行爲。

控制檯命令正在更新至少一個文檔,如果選擇器匹配多個文檔,PHP不會執行任何操作。

回答

3

只要第二條語句匹配任何東西,它總是應該更新單個文檔。

如果您希望它適用於多個文檔,您應該按照這裏所述的那樣在多個標誌中傳遞。

http://www.php.net/manual/en/mongocollection.update.php

在你的情況下,查詢應爲:

$addresses->update(array('home' => 'canada'), 
      array('$set' => array('zip' => 20)), 
      array('multiple' => true) 
); 
+0

這是一個語法錯誤 '加拿大')),而不是 '加拿大'),.非常感謝你的精彩書籍。我剛開始閱讀。 – 2012-03-21 14:46:05