Mongo 默认索引 _id 字段,并且 ObjectId 已经以时间戳开头,所以基本上,Mongo 已经为您按插入时间索引您的集合。因此,如果您使用 Mongo 默认值,则不需要索引第二个时间戳字段(甚至添加一个)。
在 ruby 中获取对象 id 的创建时间:
ruby-1.9.2-p136 :001 > id = BSON::ObjectId.new
=> BSON::ObjectId('4d5205ed0de0696c7b000001')
ruby-1.9.2-p136 :002 > id.generation_time
=> 2011-02-09 03:11:41 UTC
要为给定时间生成对象 ID:
ruby-1.9.2-p136 :003 > past_id = BSON::ObjectId.from_time(1.week.ago)
=> BSON::ObjectId('4d48cb970000000000000000')
因此,例如,如果您想加载过去一周插入的所有文档,您只需搜索大于 past_id 且小于 id 的 _id。因此,通过 Ruby 驱动程序:
collection.find({:_id => {:$gt => past_id, :$lt => id}}).to_a
=> #... a big array of hashes.
当然,您也可以为时间戳添加一个单独的字段并将其编入索引,但是当 Mongo 已经使用其默认 _id 字段为您完成了必要的工作时,没有必要对性能造成影响。
有关对象 ID 的更多信息。