2010-04-17 180 views
4

我有一个集合与指数:created_at(在这种特定情况下应该是一个日期)MongoDB的红宝石日期

从铁轨什么是节约一个条目,然后按日期检索它的正确方法?

我想是这样的:

型号: 领域:created_at,:类型=>时间

脚本:

Col.create(:created_at => Time.parse(another_model .created_at).to_s

Col.find(:所有,:条件=> {:created_at => Time.parse(相同的东西)})

,它不是返回任何东西

+0

你知道你可以从mongo中的_id中提取创建日期吗? – Dmitry 2013-01-04 23:46:14

+0

我当时没有写过这个问题...... – 2013-01-06 21:52:42

回答

3

Mongo驱动程序和各种ORM处理Date,Time和DateTime对象就好了;没有理由将它们转换成字符串。

Col.create(:created_at => another_model.created_at) 

,并找到:

Col.all(:created_at => another_model.created_at) 

你不想被设置字符串,因为日期在内部存储为BSON Date对象,并进行索引和搜索如此。如果将它们保存为字符串,则无法有效地处理大于/小于/范围比较的内容。

1
Col.create(:created_at => Time.parse(another_model.created_at).to_s) 

该行会通过你的时间对象作为一个字符串,脱掉to_s将其发送到类型解析层在你的ORM(MongoMapper或Mongoid)作为时间目的。这是我能看到的唯一一个会导致它无法工作的错误。