2011-11-21 18 views
5

Necesito escribir una consulta que encuentre todos los documentos creados en una fecha especificada.MongoMapper: encontrar todos los documentos creados en una fecha específica

Supongamos que la fecha es hoy.

yo probamos este:

Document.all(:created_at => Date.parse(Time.now.strftime('%Y/%m/%d'))) 

pero me dio:

No se puede serializar un objeto de la clase Fecha en BSON.

Gracias por su ayuda.

ACTUALIZACIÓN Este enlace se explica cómo hacerlo Date Range Queries With MongoMapper.

Document.count(:created_at => { '$gt' => 2.days.ago.midnight, '$lt' => 1.day.ago.midnight }) 
+0

El enlace de arriba ya no funciona. – user2573222

Respuesta

2

Simplemente use Time.now en su lugar. El conductor de ruby ​​sabe cómo lidiar con objetos Time.

doc = {:created_at => Time.now} 

o

doc = {:created_at => Time.utc(12,1,12)} # year, month, day 

A continuación, puede probar si el documento serializará sin lanzar un error en IRB así:

require 'bson' 

BSON.serialize(doc) 

Si se produce un error, intenta de nuevo. Si escupe un objeto serial serializado, ¡ya está listo!

Si tienes curiosidad, echa un vistazo a la fuente del método to_mongo en el controlador de MongoMapper here

2

Su :created_at es una fecha (como en "estilo JavaScript fecha con ambos componentes de fecha y hora del día"), ¿derecho? Tendrá que averiguar los límites de la fecha en cuestión en UTC, crear instancias Time para esos límites, y luego buscar todo entre esos tiempos.

Suponiendo que la zona horaria local está configurado correctamente y desea que todo lo que se creó en 2011-11-21, entonces algo como esto debe llegar hasta allí:

start_time = Time.new(2011,11,21, 0,0,0).utc 
end_time = Time.new(2011,11,22, 0,0,0).utc 
docs  = Document.where(:created_at => { :$gte => start_time }). 
         where(:created_at => { :$lt => end_time }) 

También es posible usar Time.new(2011, 11, 21).utc y Time.new(2011, 11, 22).utc pero me gustan los ceros extra como un recordatorio de que realmente no estoy trabajando con solo una cita.

Cuestiones relacionadas