2013-06-06 2 views
6

Я получаю временную метку из моей базы данных MongoDB, но он возвращается с точностью только в секундах:Могу ли я получить большую детализацию из timestamp MongoDB?

Чт Июн 06 2013 16:15:22 GMT-0400 (по восточному поясному времени)

Мне нужна большая степень детализации. Есть ли способ получить метку времени MongoDB с точностью в миллисекундах?

Я делаю вызов на моем сервере Node.js через мангуста:

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

Как я могу получить что-то более точное?

ответ

6

Объект ObjectIds хранится с точностью до нескольких секунд, и вы не можете его изменить. Так что, если вам нужно что-то среднее от миллиса, тогда вам нужно сохранить собственную метку времени.

+0

Это несчастливо. Причина, по которой я использую отметку времени Монго, заключается в том, что я думаю, что мой узел узла работает на моем сервере на двух разных машинах, что означает, что Date.now() в одном запросе может быть на самом деле больше времени, чем в следующем. Монго был способом централизовать это время. Есть ли еще один централизованный источник, который мог бы получить время с миллисекундной точностью, которая не будет страдать от потенциально наличия двух разных серверов узлов? –

+0

Я использовал другой способ получить то же самое от процесса mongod. private Дата getDBTime() { return (Date) db.eval ("function() {return new Date()}"); } –

+0

db.eval ("function() {return new Date()}") выдает сообщение об ошибке «undefined is not a 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. 

Таким образом, истинная зернистость в терминах 32 битном порядкового генерируемой MongoDB. Это связано с operations within a second, а не значением времени, поэтому вы не получаете его в миллисекундах.

 Смежные вопросы

  • Нет связанных вопросов^_^