MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Interrogazione basata su campi calcolati con Mongoid

Ho trovato la risposta da solo. Con il prefisso this.* Posso fare riferimento ai campi. E posso usare le funzioni JavaScript. MongoDB diventa sempre più fresco!

Quindi ecco la mia soluzione:

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 creazione di timestamp in js funziona in modo diverso. Quindi ho dovuto eliminare gli ultimi tre numeri e arrotondarli. Se qualcuno conosce un modo più elegante, per favore me lo faccia sapere.

Il mio unico problema rimasto è che non riesco a memorizzare una Date opporsi a MongoDB. Mi dice sempre che devo usare Time . Penso che sia meglio aggiornare mongoid alla 3.0.1.