【问题标题】:With Mongoid, can I "update_all" to push a value onto an array field for multiple entries at once?使用 Mongoid,我可以“update_all”一次将一个值推送到一个数组字段中以获取多个条目吗?
【发布时间】:2012-03-27 02:53:41
【问题描述】:

使用 Mongoid,是否可以使用 "update_all" 将一个值推送到一个数组字段中,用于匹配特定条件的所有条目?

例子:

class Foo
  field :username
  field :bar, :type => Array

  def update_all_bars
    array_of_names = ['foo','bar','baz']
    Foo.any_in(username: foo).each do |f|
      f.push(:bar,'my_new_val')
    end
  end
end

我想知道是否有一种方法可以使用“update_all”(或类似的东西)一次更新所有用户(将值“my_new_val”推送到每个匹配条目的“foo”字段)而不是循环遍历他们一次更新一个。我已经尝试了所有我能想到的方法,但到目前为止没有运气。

谢谢

【问题讨论】:

    标签: ruby arrays mongodb mongoid update-all


    【解决方案1】:

    您需要从 Mongo DB 驱动程序中调用它。你可以这样做:

    Foo.collection.update( 
      Foo.any_in(username:foo).selector, 
      {'$push' => {bar: 'my_new_val'}},
      {:multi => true}
    )
    

    或者

    Foo.collection.update( 
      {'$in' => {username: foo}}, 
      {'$push' => {bar: 'my_new_val'}},
      {:multi => true}
    )
    

    如果需要,可以在 Mongoid 内置中执行 pull_request 或功能请求。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2010-09-21
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多