MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta baseada em campos calculados com Mongoid


Encontrei a resposta sozinho. Com o prefixo this.* Eu posso fazer referência aos campos. E eu posso usar funções JavaScript. MongoDB fica cada vez mais legal!

Então aqui está minha solução:
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

A criação de timestamp em js funciona de forma diferente. Então eu tive que me livrar dos três últimos números e arredondar. Se alguém souber de uma forma mais elegante, por favor me avise.

Meu único problema é que não consigo armazenar uma Date objeto para MongoDB. Sempre me diz que tenho que usar Time . Acho melhor atualizar o mongoid para 3.0.1.