Mongo индексирует поле _id по умолчанию, и ObjectId уже начинается с отметки времени, поэтому в основном Mongo уже индексирует вашу коллекцию по времени вставки для вас.Поэтому, если вы используете значения по умолчанию Mongo, вам не нужно индексировать второе поле метки времени (или даже добавлять его).
Чтобы получить время создания идентификатора объекта в ruby:
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
Чтобы сгенерировать идентификаторы объектов для заданного времени:
ruby-1.9.2-p136 :003 > past_id = BSON::ObjectId.from_time(1.week.ago)
=> BSON::ObjectId('4d48cb970000000000000000')
Так, например, если вы хотите загрузить все документы, вставленные на прошлой неделе, вы просто ищете _idчем past_id и меньше чем id.Итак, с помощью драйвера Ruby:
collection.find({:_id => {:$gt => past_id, :$lt => id}}).to_a
=> #... a big array of hashes.
Конечно, вы также можете добавить отдельное поле для отметок времени и индексировать его, но нет смысла наносить удар по производительности, когда Mongo уже выполняет необходимую работу.для вас с полем _id по умолчанию.
Дополнительная информация об идентификаторах объектов.