2012-03-24 19 views
5

Mam model:Data w Mongoid odpytuje

class SimpleAction 
    include Mongoid::Document 
    field :set_date, :type => Date 

i mam pewne dane w kolekcji:

{ "_id": ObjectId ("4f6dd2e83a698b2518000006"), "name": " lost ", " notes ":" "," set_date (1i) ":" 2012 "," set_date (2i) ":" 3 ", " set_date (3i) ":" 25 "," set_date (4i) ":" 13 "," set_date (5i) ":" 57 ", " czas trwania ": 15," todo ":" 4 "}

Możesz zobaczyć datę sklepu mongoid w pięciu polach - set_date (ni).

Mam dwa pytania:

  • Jak można filtrować dane według pola set_date w kliencie konsoli Mongo? Coś takiego:

    db.simple_actions.find({ set_date : { "$lte" : new Date() } }) 
    

    Moje zapytanie nie zwróciło żadnych danych.

  • Jak mogę filtrować dane według pola set_date w moim kontrolerze Rails? Coś takiego:

    @simple_actions = SimpleAction.where(:set_date => { '$lte' => Date.today }) 
    

Odpowiedz

12

Polecam nie używając Date, lecz DateTime:

field :set_date, :type => DateTime 

Teraz nie tylko będzie on przechowywany w 1 polu, tak jak poniżej:

"set_date" : ISODate("2012-03-14T17:42:27Z") 

Ale Mongoid prawidłowo obsługuje różne konwersje pod kątem zapytań takich, jak chcesz:

SimpleAction.where(:set_date => { :$lte => Date.today }) 
+0

Hmm .. Zmieniłem modelu difinition i wstawić nowe recodrs w kolekcji, ale nic się nie zmieniło. – demas

+0

Oto fragment formularza: <% = f.datetime_select: set_date%> – demas

+0

Czy możesz dokładniej określić "nic się nie zmieniło"? Oczywiście, że DateTime to inny typ pola niż data, tak? :) – rfunduk

0

Można go używać z czasem klasy.

Rails jest tak dobry z API dla przenośnych (takich jak Android), gdy data wysłana z mobile API jak: 1482723520. (last_created = 1482723520)

Można używać go tak:

time = Time.at(params[:last_created].to_i) 

a w Rails można wyszukać tak:

Number.where(created_at: { :$gte => time })