我可以从MongoDB时间戳中获得更大的粒度吗?

时间:2013-06-06 20:28:58

标签: mongodb timestamp mongoose precision milliseconds

我从我的MongoDB数据库中获取了一个时间戳,但它只在几秒钟内以精确度返回:

  

Thu Jun 06 2013 16:15:22 GMT-0400(Eastern Daylight Time)

我需要更大的粒度。有没有办法在几毫秒内获得具有精度的MongoDB时间戳?

我正在通过mongoose在我的node.js服务器上进行调用:

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

我怎样才能获得更精确的东西?

2 个答案:

答案 0 :(得分:7)

ObjectIds以秒的精度存储,您无法更改它。因此,如果您需要毫秒粒度,那么您必须存储自己的时间戳值。

答案 1 :(得分: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有关,而与时间值无关,因此您无法以毫秒为单位获取它。