私は、タイムスタンプを次々に生成され、これらを得た:次のタイムスタンプのために
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
に関連しており、時間値ではないため、ミリ秒単位で取得することはありません。
出典
2017-03-24 07:26:28
Nav
これは残念です。私がMongoのタイムスタンプを使用しているのは、私のノードホストが2つの異なるマシン上でサーバを実行していると考えられるからです。つまり、あるリクエストのDate.now()が実際には次のマシンよりも時間が長くなる可能性があります。モンゴはその時を集中化する方法でした。 2つの異なるノードサーバーが潜在的に犠牲にならないミリ秒の精度で時間を得ることができる別の集中ソースがありますか? –
私はmongodプロセスから同じものを得るために別の方法を使用しました。 プライベートDate getDBTime(){ return(Date)db.eval( "function(){return new Date()}"); } –
db.eval( "function(){return new Date()}")は、 "undefined is not function"というエラーをスローします。私はこのようにDBを取得しています:var db = mongoose.connect(connectionString).connection.db;それは今のところよく見えますか? –