关于这个问题:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?
我想问一下:
{:multi => true}
的目的是什么?update_all
时将值推送到数组中吗?因为这个问题是在2010年。感谢。
答案 0 :(得分:3)
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}
)
答案 1 :(得分:0)
特殊用例是Mongodb分片(http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。特别是在通过分片mongo集合进行更新时,当我使用除_id之外的标识符时,更新失败。我必须将multi设置为true,然后更新各个分片中的所有文档。