2012-03-24 19 views
5

Ho un modello:data data Mongoid interroga

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

e ho alcuni dati in collezione:

{ "_id": ObjectId ("4f6dd2e83a698b2518000006"), "name": " perso ", " note ":" "," set_date (1i) ":" 2012 "," set_date (2i) ":" 3 ", " set_date (3i) ":" 25 "," set_date (4i) ":" 13 "," set_date (5i) ":" 57 ", " durata ": 15," todo ":" 4 "}

È possibile vedere la data del negozio mongoid nei cinque campi - set_date (ni).

Ho due domanda:

  • Come posso filtrare i dati di campo set_date nel client console mongo? Qualcosa di simile:

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

    La mia richiesta non ha restituito alcun dato.

  • Come posso filtrare i dati per campo set_date nel mio controller Rails? Qualcosa di simile a questo:

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

risposta

12

mi sento di raccomandare di non utilizzare Date, ma invece DateTime:

field :set_date, :type => DateTime 

Ora, non solo sarà memorizzato in 1 campo, in questo modo:

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

Ma Mongoid gestirà correttamente varie conversioni per query come desiderate:

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

Hmm .. ho cambiato difinition modello ed inserire nuovi recodrs nella raccolta, ma nulla è cambiato. – demas

+0

Ecco il frammento del modulo: <% = f.datetime_select: set_date%> – demas

+0

Puoi essere più specifico su "nulla cambiato"? Chiaramente DateTime è un tipo di campo diverso dalla data, sì? :) – rfunduk

0

È possibile utilizzarlo con la classe Ora.

Rails è così buono con Api per i dispositivi mobili (come Android), al momento dell'invio data da cellulare a api come: 1482723520. (last_created = 1.482.723,52 mille)

è possibile utilizzarlo come quella:

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

e in Rails è possibile interrogare così:

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