your programing

Mongo ObjectID에서 생성 된 날짜를 추출하는 방법

lovepro 2020. 12. 29. 08:09
반응형

Mongo ObjectID에서 생성 된 날짜를 추출하는 방법


Mongo 셸을 사용하여 Mongo db를 쿼리하고 있습니다. ObjectID에 포함 된 타임 스탬프를 쿼리의 일부로 사용하고 출력으로 추출 할 열로 사용하고 싶습니다. 자체적으로 ObjectID를 생성하도록 Mongo를 설정했습니다.

내 문제는 타임 스탬프를 추출하기 위해 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});

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")

이 질문 은 쿼리 상황에서 _id의 포함 된 타임 스탬프를 사용하는 방법을 이해하는 데 도움이됩니다 ( Mongo Extended JSON 문서 참조). 이것이 수행되는 방법입니다.

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

oid에 의해 제공된 문서보다 이전에 작성된 문서를 찾습니다. 자연스러운 정렬 및 제한과 함께 사용하면 BSON _ids를 활용하여 Twitter와 유사한 API 쿼리를 만들 수 있습니다 ( 최근에 보유한 OID를 알려 주시면 20 개를 더 제공하겠습니다 ).


파이썬에서는 다음과 같이 할 수 있습니다.

>>> 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

참조 URL : https://stackoverflow.com/questions/7327296/how-do-i-extract-the-created-date-out-of-a-mongo-objectid

반응형