Как извлечь созданную дату из объекта 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