Mongodb / Mongoid - {:multi =>是的意思是

时间:2012-04-11 09:06:28

标签: mongodb mongoid

关于这个问题:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?

我想问一下:

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

2 个答案:

答案 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,然后更新各个分片中的所有文档。