對於這個問題:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?的MongoDB/Mongoid - 這是什麼{:多=>真}意味着
我想問:
- 什麼的
{:multi => true}
這裏的目的是什麼? - 現在通過mongoid可以在
update_all
中將值推入數組嗎?因爲問題是在2010年。
謝謝。
對於這個問題:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?的MongoDB/Mongoid - 這是什麼{:多=>真}意味着
我想問:
{:multi => true}
這裏的目的是什麼?update_all
中將值推入數組嗎?因爲問題是在2010年。謝謝。
爲MongoDB update method狀態下的文件:
多 - 指示是否匹配標準的所有文件應當更新而不是僅僅一個。可以在下面的$操作符中使用。
所以基本上multi
參數是什麼讓你鏈接到問題update_all
行爲。
在回答你的第二個問題:yes - Mongoid現在內置了這個功能。文檔參考是here。但是你可以使用它像這樣:
User.where(:gender => "Male").update_all(:title => "Mr")
更新
在你要推的值到一個數組字段的情況下,你仍然需要直接使用MongoDB的圖書館,因爲Mongoid update_all
方法僅支持$set
數據庫更新方法(可用於更新整個數組,但不會將值推入)。
在回答您鏈接到會的工作問題上的例子,我抄它低於誰碰到這個問題絆倒(感謝shingara!):
User.collection.update(
{'$in' => {:gender => 'Male'}},
{'$push' => {:titles => 'Mr'}},
{:multi => true}
)
特定用例是當MongoDB是分片(http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。特別是在更新分片mongo集合時,當我使用_id以外的標識符時,更新失敗。我必須將multi設置爲true,然後更新各個分片中的所有文檔。
感謝@theTRON,對於問題2:您顯示更新普通字段,是否也可以使用它將值推入數組字段? – larryzhao 2012-04-11 13:42:21
Mongoid文檔提到它使用'$ set'方法 - 它設置一個字段的值。所以你必須去MongoDB庫 - 我已經更新了我的答案以反映這一點。 – theTRON 2012-04-11 14:03:18
謝謝,所以這意味着仍然使用這種方式。 :) – larryzhao 2012-04-11 14:35:12