ruby-on-rails - Mongoid 命名范围比较同一文档中的两个时间字段

标签 ruby-on-rails mongodb mongoid

我需要在 Mongoid 中创建一个命名范围,用于比较同一文档中的两个时间字段。比如

scope :foo, :where => {:updated_at.gt => :checked_at}

这显然行不通,因为它处理 :checked_at作为一个符号,而不是实际的领域。关于如何做到这一点的任何建议?

更新 1

这是我声明了这个范围的模型,去掉了很多额外的代码。

class User
  include Mongoid::Document
  include Mongoid::Paranoia
  include Mongoid::Timestamps

  field :checked_at, :type => Time

  scope :unresolved, :where => { :updated_at.gt => self.checked_at }
end

这给了我以下错误:

'<class:User>': undefined method 'checked_at' for User:Class (NoMethodError)

最佳答案

据我所知,mongodb 不支持对动态值的查询。 但你可以使用 javascript 函数:

scope :unresolved, :where => 'this.updated_at >= this.checked_at'

为了加快速度,您可以添加一个类似“is_unresolved”的属性,当此条件匹配时,该属性将在更新时设置为 true(并为其编制索引)。

关于ruby-on-rails - Mongoid 命名范围比较同一文档中的两个时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795044/

相关文章:

ruby - 如何从 Mongoid 的嵌入文档中排除字段?

ruby-on-rails - embeds_many 和 embeds_one 来自与 Mongoid 相同的模型

ruby-on-rails - 测试 Rails 模型验证

php - mysql 中的 Rails 多数组格式

node.js - 使用 Mongoose 填充其他集合中的记录数

python - mongodb到python稀疏矩阵,如何让它更快?

ruby - Mongoid 删除文档匹配ID

ruby-on-rails - 访问 a 的属性在 Rails 中有很多关联

ruby-on-rails - rails : call method within model

mongodb - 为什么我们在 MongoDB 复制中需要一个 'arbiter'?