4

关于这个问题:使用 Mongoid,我可以“update_all”一次将一个值推送到一个数组字段中以获取多个条目吗?

我想问一下:

  1. 来这里的目的是{:multi => true}什么?
  2. update_all现在通过 mongoid是否可以将值推送到数组中?因为问题是在2010年。

谢谢。

4

2 回答 2

6

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}
)
于 2012-04-11T13:15:33.350 回答
0

一个特定的用例是对 Mongodb 进行分片(http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。特别是在对分片 mongo 集合进行更新时,当我使用 _id 以外的标识符时,更新失败。我必须将 multi 设置为 true,然后它会更新各个分片中的所有文档。

于 2015-03-11T06:37:07.790 回答