sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta basada en campos calculados con Mongoid

Encontré la respuesta yo mismo. Con el prefijo this.* Puedo hacer referencia a los campos. Y puedo usar funciones de JavaScript. ¡MongoDB se vuelve más y más genial!

Así que aquí está mi solución:

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

La creación de marcas de tiempo en js funciona de manera diferente. Así que tuve que deshacerme de los últimos tres números y redondearlos. Si alguien conoce una forma más elegante, hágamelo saber.

El único problema que me queda es que no puedo almacenar una Date objeto a MongoDB. Siempre me dice que tengo que usar Time . Creo que mejor actualizo mongoid a 3.0.1.