2013-06-06 26 views
6

私は私のMongoDBデータベースからタイムスタンプを取得していますが、それはわずか数秒で戻っ精度で来ています:MongoDBタイムスタンプからより詳細な情報を取得できますか?

木2013年6月6日16時15分22秒GMT-0400(東部夏時間)

もっと細かくする必要があります。 MongoDBのタイムスタンプを精度でミリ秒単位で取得する方法はありますか?

私はマングースを経由して、私のNode.jsサーバー上でコールを作ってるんだ:

var timestamp = new ObjectID().getTimestamp(); 

私は何かをより正確に取得できますか?

答えて

6

ObjectIdsは秒単位の精度で保存されるため、変更することはできません。したがって、ミリ秒単位のものが必要な場合は、独自のタイムスタンプ値を格納する必要があります。

+0

これは残念です。私がMongoのタイムスタンプを使用しているのは、私のノードホストが2つの異なるマシン上でサーバを実行していると考えられるからです。つまり、あるリクエストのDate.now()が実際には次のマシンよりも時間が長くなる可能性があります。モンゴはその時を集中化する方法でした。 2つの異なるノードサーバーが潜在的に犠牲にならないミリ秒の精度で時間を得ることができる別の集中ソースがありますか? –

+0

私はmongodプロセスから同じものを得るために別の方法を使用しました。 プライベートDate getDBTime(){ return(Date)db.eval( "function(){return new Date()}"); } –

+0

db.eval( "function(){return new Date()}")は、 "undefined is not function"というエラーをスローします。私はこのようにDBを取得しています:var db = mongoose.connect(connectionString).connection.db;それは今のところよく見えますか? –

0

私は、タイムスタンプを次々に生成され、これらを得た:次のタイムスタンプのために

ObjectId("586a291570b9a181fc2f61ba").getTimestamp(); 
ISODate("2017-01-02T10:19:01Z") 

ObjectId("586a291570b9a181fc2f61bc").getTimestamp(); 
ISODate("2017-01-02T10:19:01Z") 

をあなたがそこに、getTimestamp()によって印刷された唯一の粒度は秒であるが、ことがわかりますObjectId文字列が両方とも01秒であるにもかかわらず変化するようにする詳細度です。

The reason

BSON has a special timestamp type for internal MongoDB use and is not associated with the regular Date type. Timestamp values are a 64 bit value where: 

    the first 32 bits are a time_t value (seconds since the Unix epoch) 
    the second 32 bits are an incrementing ordinal for operations within a given second. 

Within a single mongod instance, timestamp values are always unique. 

だから真粒度はMongoDBのによって生成された32ビットの順序に関するものです。それはoperations within a secondに関連しており、時間値ではないため、ミリ秒単位で取得することはありません。

関連する問題