Mongoid 3.1在Ruby 1.9.3中查询语法问题

时间:2013-02-22 15:50:01

标签: ruby mongoid criteria

我有一个Ruby Association类,如下所示:

class Association
  include Mongoid::Document
  field :issued, type: Integer
  field :lifetime, type: Integer
end

我想要删除我doc.issued + doc.lifetime > Time.now集合中的所有文档。我在网上找到了以下语法:

Association.delete_all(["issued + lifetime > ?", Time.now.to_i])

我无法让它工作,我收到以下错误:

TypeError: can't convert Symbol into Integer
    from /var/lib/gems/1.9.1/gems/mongoid-3.1.0/lib/mongoid/persistence.rb:298:in `[]'
    from /var/lib/gems/1.9.1/gems/mongoid-3.1.0/lib/mongoid/persistence.rb:298:in `delete_all'
    from (irb):77
    from /usr/bin/irb:12:in `<main>'

有人能告诉我这种语法有什么问题,或者建议使用不同的语法吗?

1 个答案:

答案 0 :(得分:1)

delete_all ,如 ,在单个字段上需要list of conditions,例如:

Association.delete_all(issued: 10)

在您的情况下,您可以使用Javascript。

Association.for_js("(this.issued + this.lifetime) > ti", ti: Time.now.to_i).delete_all

注意:性能不会很好,因为将在每个文档上测试条件。