web-dev-qa-db-ja.com

Mongo ObjectIDから作成日を抽出する方法

Mongo Shellを使用して、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});
56
emilebaizel

getTimestamp()

必要な機能はこれです。すでにシェルに含まれています:

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

参照資料

ドキュメントからこのセクションをチェックしてください:

この単体テストでも同じことが実証されます。

Mongo Shellを使用した例:

> 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")
95
Chris Fulstow

この質問 は、クエリの状況で_idの埋め込みタイムスタンプを使用する方法を理解するのに役立ちます( Mongo Extended JSON ドキュメントを参照)。これがどのように行われるかです:

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

oidで指定されたドキュメントよりも前に作成されたドキュメントを検索します。自然な並べ替えと制限と一緒に使用すると、BSON _idを使用してTwitterのようなAPIクエリを作成できます(最後のOID 20

16
Stefan

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

3
es2