MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявка, базирана на изчислени полета с Mongoid

Намерих отговора сам. С префикс 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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb C# въведени агрегации с Group Unwind и Project

  2. Mongoose:трябва ли персонализиран _id да бъде деклариран като индекс и да бъде уникален

  3. setDate не задава правилно дата в eval в партиден скрипт

  4. Как да извлека подмножество от полета с помощта на драйвера C# MongoDB?

  5. MongoDB .NET не генерира _id при upsert