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});
必要な機能はこれです。すでにシェルに含まれています:
ObjectId.prototype.getTimestamp = function() {
return new Date(parseInt(this.toString().slice(0,8), 16)*1000);
}
ドキュメントからこのセクションをチェックしてください:
この単体テストでも同じことが実証されます。
> 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 _idを使用してTwitterのようなAPIクエリを作成できます(最後のOID 20)
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