Как извлечь созданную дату из объекта Mongo ObjectID

Я использую оболочку Mongo для запроса моего Mongo db. Я хочу использовать временную метку, содержащуюся в ObjectID, как часть моего запроса, а также как столбец для извлечения в вывод. У меня есть настройка Mongo для создания ObjectIDs самостоятельно.

Моя проблема заключается в том, что я не могу узнать, как работать с ObjectID, чтобы извлечь временную метку.

Вот запросы, которые я пытаюсь получить. Поле "createdDate" является заполнителем; не знаете, что такое правильное поле:

//Find everything created since 1/1/2011
db.myCollection.find({date: {$gt: new Date(2011,1,1)}});

//Find everything and return their createdDates
db.myCollection.find({},{createdDate:1});

Ответ 1

getTimestamp()

Эта функция вам нужна, она уже включена в оболочку:

ObjectId.prototype.getTimestamp = function() {
    return new Date(parseInt(this.toString().slice(0,8), 16)*1000);
}

Ссылки

Ознакомьтесь с этим разделом из документации:

Этот unit test также демонстрирует то же самое:

Пример использования оболочки Mongo:

> db.col.insert( { name: "Foo" } );
> var doc = db.col.findOne( { name: "Foo" } );
> var timestamp = doc._id.getTimestamp();

> print(timestamp);
Wed Sep 07 2011 18:37:37 GMT+1000 (AUS Eastern Standard Time)

> printjson(timestamp);
ISODate("2011-09-07T08:37:37Z")

Ответ 2

Этот вопрос полезен для понимания того, как использовать встроенную временную метку _id в ситуациях запроса (относится к Документация Mongo Extended JSON). Вот как это делается:

col.find({..., 
     '_id' : {'$lt' : {'$oid' : '50314b8e9bcf000000000000'}} 
})

находит документы, созданные ранее, чем документы, предоставленные oid. Используемый вместе с естественной сортировкой и ограничением вы можете использовать BSON _ids для создания запросов на использование Twitter-подобных API (дайте мне последний OID, который у вас есть, и я предоставим еще двадцать)

Ответ 3

В python вы можете сделать это:

>>> from bson.objectid import ObjectId
>>> gen_time = datetime.datetime(2010, 1, 1)
>>> dummy_id = ObjectId.from_datetime(gen_time)
>>> result = collection.find({"_id": {"$lt": dummy_id}})

Я думаю, ObjectId.from_datetime() - его полезный метод стандартного bson lib Возможно, у других языковых привязок есть альтернативная встроенная функция. Источник: http://api.mongodb.org/python/current/api/bson/objectid.html