У Джона Нунемейкера есть пост в блоге с несколькими полезными советами о Mongo ObjectIds - http://mongotips.com/b/a-few-objectid-tricks/ - в частности, меня заинтересовал совет о generation_time.Он предполагает, что нет необходимости явно хранить время create_at в документах Монго, потому что вы всегда можете извлечь его из идентификатора, который привлек мое внимание.Проблема в том, что я не могу понять, как генерировать монго-запросы в mongomapper, чтобы найти документы на основе времени создания, если все, что у меня есть, это идентификатор.
Если я сохраню ключ: made_at как часть документа, я могувыполните запрос в mongomapper, чтобы получить все документы, созданные с 1 декабря, например:
Foo.where(:created_at.gt=>Time.parse("2011-12-01"))
(что соответствует:
{created_at: {"$gt"=>Thu Dec 01 06:00:00 UTC 2011}}
Я не могу понять, как сделать эквивалентзапрос с использованием ObjectId. Я думаю, это выглядело бы примерно так (хотя, конечно, generation_time - это функция ruby, но есть ли эквивалент, который я могу использовать для объекта в контексте запроса Монго?)
Foo.where('$where'=>"this.id.generation_time > new Date('2011-12-01')")
{$where: "this.id.generation_time > new Date('2011-12-01')"}
Еще один вопрос: если я откажусь от хранения отдельных временных меток, потеряю ли я метаданные временной метки, если дампа и восстановлю свою базу данных, используя mongodump? Есть ли рекомендуемые методы резервного копирования / восстановления, которые сохраняют ObjectIds?