关于这个问题:使用 Mongoid,我可以“update_all”一次将一个值推送到一个数组字段中以获取多个条目吗?
我想问一下:
- 来这里的目的是
{:multi => true}
什么? update_all
现在通过 mongoid是否可以将值推送到数组中?因为问题是在2010年。
谢谢。
关于这个问题:使用 Mongoid,我可以“update_all”一次将一个值推送到一个数组字段中以获取多个条目吗?
我想问一下:
{:multi => true}
什么?update_all
现在通过 mongoid是否可以将值推送到数组中?因为问题是在2010年。谢谢。
MongoDB 更新方法的文档说明如下:
multi - 指示是否应该更新所有符合条件的文档,而不仅仅是一个。可以与下面的 $ 运算符一起使用。
所以基本上multi
参数是启用update_all
您链接到的问题中的行为的原因。
回答您的第二个问题:是的 - Mongoid 现在已内置此功能。文档参考在这里。但是你可以像这样使用它:
User.where(:gender => "Male").update_all(:title => "Mr")
更新
如果你想将一个值推送到一个数组字段上,你仍然需要直接使用 MongoDB 库,因为 Mongoidupdate_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,然后它会更新各个分片中的所有文档。