С Mongoid, я могу "update_all" вставить значение в поле массива для нескольких записей одновременно? - PullRequest
5 голосов
/ 09 марта 2012

Используя 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

Мне интересно, есть ли способ обновить всех пользователей одновременно (чтобы поместить значение 'my_new_val' в поле "foo" для каждой соответствующей записи), используя update_all (или что-то подобное) вместо циклического прохождения их обновить их по одному. Я перепробовал все, что только могу придумать, и пока не повезло.

Спасибо

1 Ответ

5 голосов
/ 10 марта 2012

Вам нужно вызвать это из драйвера БД Mongo. Вы можете сделать:

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

Вы можете сделать pull_request или запрос функции, если хотите, во встроенном Mongoid.

...