【发布时间】:2012-04-11 09:06:27
【问题描述】:
关于这个问题:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?
我想问一下:
-
{:multi => true}的目的是什么? - 现在
update_all通过 mongoid 是否可以将值推入数组?因为问题是在 2010 年。
谢谢。
【问题讨论】:
关于这个问题:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?
我想问一下:
{:multi => true} 的目的是什么?update_all 通过 mongoid 是否可以将值推入数组?因为问题是在 2010 年。谢谢。
【问题讨论】:
MongoDB update method 的文档说明如下:
multi - 指示是否应更新所有符合条件的文档,而不仅仅是一个。可以与下面的 $ 运算符一起使用。
所以基本上multi 参数是启用您链接到的问题中的update_all 行为的原因。
回答您的第二个问题:是的 - 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}
)
【讨论】:
$set 方法 - 设置字段的值。所以你必须使用 MongoDB 库——我已经更新了我的答案以反映这一点。
一个特殊的用例是对 Mongodb 进行分片 (http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。特别是在对分片 mongo 集合进行更新时,当我使用 _id 以外的标识符时,更新失败。我必须将 multi 设置为 true,然后它会更新各个分片中的所有文档。
【讨论】: