2011-04-05 75 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