【问题标题】:Mongodb/Mongoid - what does {:multi => true} meanMongodb/Mongoid - {:multi => true} 是什么意思
【发布时间】: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?

我想问一下:

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

谢谢。

【问题讨论】:

    标签: mongodb mongoid


    【解决方案1】:

    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}
    )
    

    【讨论】:

    • 感谢@theTRON,问题2:您展示了更新普通字段,是否也可以使用它将值推送到数组字段中?
    • Mongoid 文档提到它使用$set 方法 - 设置字段的值。所以你必须使用 MongoDB 库——我已经更新了我的答案以反映这一点。
    • 谢谢,这意味着仍在使用这种方式。 :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 2015-07-11
      • 1970-01-01
      • 2013-02-20
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2012-03-12
      相关资源
      最近更新 更多