基于Mongoid计算字段的查询

我想在模型Invoice实施一个overdue范围,以返回超过日期的所有发票,直到他们必须付款为止。 我有字段invoice_date, :type => Datedays_for_payment, :type => Integer

在我之前的版本(基于ActiveRecord构建)中,我可以使用该查询

 Invoice.where("invoice_date + days_for_payment < ?", Date.today) 

此查询在DB端进行了计算。

有没有办法让Mongoid完成同样的事情? 或者有没有人知道一个好的解决方法(proc,lambda等)?

我使用mongoid’2.4.12′

我自己找到了答案。 使用前缀this.*我可以引用这些字段。 我可以使用JavaScript函数。 MongoDB变得更酷,更酷!

所以这是我的解决方案:

 class Invoice include Mongoid::Document field :invoice_date, :type => Date field :days_for_payment, :type => Integer ... scope :overdue, where("(Math.round(this.invoice_date.getTime() / 1000) + (this.days_for_payment * 24 * 3600)) < #{Time.now.to_i}") ... end 

js中的时间戳创建工作方式不同。 所以我不得不摆脱最后三个数字并围绕它们。 如果有人知道更优雅的方式,请告诉我。

我唯一的问题是,我不能将Date对象存储到MongoDB。 它总是告诉我,我必须使用Time 。 我想我最好将mongoid升级到3.0.1。

我不确定mongoid ,如果你直接查询mongodb你可以使用$ where运算符 。 不推荐使用它,因为它不使用索引。 如果您有另一个条件将记录过滤到一个小集合,那么您可以使用$ where进一步过滤它。