2011-04-05 17 views
13

tengo un modeloMongoId actualizar todos los documentos con las condiciones

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

Ahora tengo que actualizar el salario de todo del empleado a 10.000 cuya dirección 1 es "Calgary"

Ahora he intentado esta consulta

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

Pero esta consulta me dio error como:

NoMethodError: undefined method `update_all' for Employee:Class 

Gracias

+0

Actualización: Actualmente estoy usando v2.0.0 MongoId beta19 – Gagan

Respuesta

35

Debe intentar actualizar su MongoID a la última versión. Mongoid 2.0 fue lanzado hace algún tiempo. Supongo que update_all, destroy_all y delete_all se introdujeron en uno de los rc.

Después de la actualización, sigue debe trabajar

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

yo sepa el Gotcha es que 'update_all' es un método en un ResourceList (conjunto de resultados) y no en el modelo en sí. Entonces no puedes llamar a Foo.update_all, pero puedes llamar a Foo.some_selection.update_all. – berkes

+0

@berkes: puede obtener la selección "vacía" utilizando 'Foo.scoped.update_all' –

0

Encontré this una buena respuesta, ya que mongoid no permite actualizaciones por lotes

0

Una forma más actualizada de hacerlo usin g ciclomotor (el conductor subyacente)

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

consulta raro por cierto: P

Cuestiones relacionadas