Как мне извлечь созданную дату из Mongo ObjectID - PullRequest
54 голосов
/ 07 сентября 2011

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

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

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

//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});

Ответы [ 3 ]

93 голосов
/ 07 сентября 2011

getTimestamp ()

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

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

Ссылки

Проверьте этот раздел из документов:

Этот модульный тест также демонстрирует то же:

Пример использования оболочки 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")
16 голосов
/ 21 августа 2012

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

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

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

3 голосов
/ 09 октября 2014

В 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. Возможно, привязки других языков имеют альтернативную встроенную функцию.Источник: http://api.mongodb.org/python/current/api/bson/objectid.html

...