6

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」(または同様のもの)を使用して、すべてのユーザーを一度に更新する方法(一致する各エントリの「foo」フィールドに値「my_new_val」をプッシュする方法)があるかどうか疑問に思っています。それらを一度に1つずつ。私は考えられるすべてのことを試しましたが、今のところ運がありません。

ありがとう

4

1 に答える 1

5

MongoDBドライバーから呼び出す必要があります。できるよ :

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または機能リクエストを実行できます。

于 2012-03-10T10:10:28.503 に答える