使用Mongoid,我可以"update_all"将值一次性地推送到多个条目的数组字段中吗?

ord*_*aos 6 ruby arrays mongodb mongoid update-all

使用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
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法一次更新所有用户(将值'my_new_val'推送到每个匹配条目的"foo"字段)使用"update_all"(或类似的东西)而不是循环通过它们来更新他们一次一个.我已经尝试了所有我能想到的东西,到目前为止还没有运气.

谢谢

shi*_*ara 5

您需要从Mongo DB Driver调用它.你可以做 :

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

要么

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

您可以在Mongoid内置中执行pull_request或功能请求.