mongoid обновляет все документы с условиями

#ruby #mongoid #document

#ruby #mongoid #документ

Вопрос:

У меня есть модель

 class Employee
  include Mongoid::Document
  field :first_name
  field :last_name
  field :address1
  field :address2
  field :salary
end
  

Теперь мне нужно обновить зарплату всех сотрудников до 10000, адрес1 которого — «Калгари»

Теперь я попробовал этот запрос

 Employee.update_all "salary = 10000", "address1 = 'Calgary'"
  

Но этот запрос выдал мне ошибку как:

 NoMethodError: undefined method `update_all' for Employee:Class
  

Спасибо

Комментарии:

1. Обновление: в настоящее время я использую mongoid v2.0.0 beta19

Ответ №1:

Вы должны попытаться обновить свой MongoID до последней версии. Mongoid 2.0 был выпущен некоторое время назад. Я предполагаю, что update_all, destroy_all и delete_all были введены в одном из rc.

После обновления должно сработать следующее

 Employee.where(:address1 => 'Calgary').update_all(:salary => 10000)
  

Комментарии:

1. Проблема в том, что update_all это метод для списка ресурсов (массива результатов), а не для самой модели. Таким образом, вы не можете вызвать Foo.update_all, но вы можете вызвать Foo.some_selection.update_all.

2. @berkes: вы можете получить «пустое» выделение, используя Foo.scoped.update_all

Ответ №2:

В соответствии с этим http://groups.google.com/group/mongoid/browse_thread/thread/ac08564d5a38da13?pli=1

и быстрый Model.response_to?(:update_all) выдает true, предполагая, что Model.update_all в порядке

Ответ №3:

Более современный способ сделать это с помощью Moped (базового драйвера):

 Employee.collection.find(address1: 'Calgary').update_all(salary: 10000)
  

Кстати, странный запрос: P