2011-04-05 72 views
13

我有一個模型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 

謝謝

+0

更新:我目前使用mongoid V2.0.0 beta19 – Gagan 2011-04-05 05:38:04

回答

35

您應該嘗試將您的MongoID更新到最新版本。 Mongoid 2.0在某個時候發佈了。我想update_all,destroy_all和delete_all是在一個rc中引入的。

升級之後,下面應該工作

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

AFAIK的小問題,就是'update_all'是在ResourceList的方法(結果數組),而不是模型本身。所以你不能調用Foo.update_all,但你可以調用Foo.some_selection.update_all。 – berkes 2011-04-12 19:53:58

+0

@berkes:你可以通過使用'Foo.scoped.update_all'來獲得「空」 – 2015-08-27 09:13:36

0

我發現this是一個很好的答案,因爲mongoid不允許批量更新

0

一個更新的方法來做它使用克助力車(底層驅動程序)

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

順便說一句怪異查詢:P