2011-11-21 61 views
5

我需要编写一个查询来查找在指定日期创建的所有文档。MongoMapper:查找在指定日期创建的所有文档

让我们假设日期是今天。

我尝试这样做:

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

但我得到:

无法序列类Date的对象为BSON。

感谢您的帮助。

UPDATE 此链接说明如何操作Date Range Queries With MongoMapper

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

上面的链接不起作用了。 – user2573222

回答

2

只需使用Time.now代替。 Ruby驱动程序知道如何处理Time对象。

doc = {:created_at => Time.now} 

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

然后,您可以测试是否该文件将序列没有IRB抛出一个错误是这样的:如果你得到一个错误

require 'bson' 

BSON.serialize(doc) 

,再试一次。如果它吐出一个序列化的bson对象,那么你很好!

如果你是好奇,检查出to_mongo法源在mongomapper司机here

2

:created_at是一个日期(如“JavaScript的风格日期与日期和时间 - 日期组件” ), 对?您需要找出UTC中有关日期的边界,为这些边界构建Time实例,然后搜索这些时间之间的所有内容。

假设你的本地时区配置正确,你想这是在2011-11-21创造万物,那么这样的事情应该让你有:

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 }) 

你也可以使用Time.new(2011, 11, 21).utcTime.new(2011, 11, 22).utc但我喜欢额外的零作为提醒,我并不是真的只是约会。

相关问题