【问题标题】:mongoid update all documents with conditionsmongoid 使用条件更新所有文档
【发布时间】:2011-07-29 16:26:56
【问题描述】:

我有模特

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

谢谢

【问题讨论】:

  • 更新:我目前使用的是mongoid v2.0.0 beta19

标签: ruby mongoid document


【解决方案1】:

使用Moped(底层驱动程序)的更新方法:

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

奇怪的查询顺便说一句:P

【讨论】:

    【解决方案2】:

    据此http://groups.google.com/group/mongoid/browse_thread/thread/ac08564d5a38da13?pli=1

    并且快速 Model.respond_to?(:update_all) 输出 true,表明 Model.update_all 没问题

    【讨论】:

      【解决方案3】:

      您应该尝试将您的 MongoID 更新到最新版本。 Mongoid 2.0 是在某个时候发布的。我猜 update_all、destroy_all 和 delete_all 是在其中一个 rc 中引入的。

      升级后,以下应该可以工作

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

      【讨论】:

      • AFAIK 的问题是 update_all 是 ResourceList(结果数组)而不是模型本身的方法。所以你不能调用Foo.update_all,但是你可以调用Foo.some_selection.update_all。
      • @berkes:您可以使用Foo.scoped.update_all获得“空”选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2016-10-29
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多