2011-04-05 4 views
13

j'ai un modèleMongoId mettre à jour tous les documents avec des conditions

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

Maintenant, je dois mettre à jour à 10 000 le salaire de tous les employés dont address1 est « Calgary »

Maintenant, j'essayé cette requête

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

Mais cette requête m'a donné l'erreur comme:

NoMethodError: undefined method `update_all' for Employee:Class 

Merci

+0

Mise à jour: J'utilise actuellement v2.0.0 MongoId beta19 – Gagan

Répondre

35

Vous devriez essayer de mettre à jour votre MongoID vers la dernière version. Mongoid 2.0 a été publié il y a quelque temps. Je suppose que update_all, destroy_all et delete_all ont été introduits dans l'un des rc.

Après la mise à niveau, à la suite devrait fonctionner

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

AFAIK Gotcha est que 'update_all' est une méthode sur un ResourceList (tableau de résultats) et non sur le modèle lui-même. Vous ne pouvez donc pas appeler Foo.update_all, mais vous pouvez appeler Foo.some_selection.update_all. – berkes

+0

@berkes: vous pouvez obtenir une sélection "vide" en utilisant 'Foo.scoped.update_all' –

0

J'ai trouvé this une bonne réponse, comme mongoid ne permet pas de mises à jour par lots

0

Une façon plus à jour de le faire usin g vélomoteur (le pilote sous-jacent)

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

étrange requête BTW: P

Questions connexes