我从我的 MongoDB 数据库中获得了一个时间戳,但它只在几秒钟内精确地返回:
2013 年 6 月 6 日星期四 16:15:22 GMT-0400(东部夏令时间)
我需要更大的粒度。有没有办法以毫秒为单位获取 MongoDB 时间戳?
我正在通过 mongoose 在我的 node.js 服务器上进行调用:
var timestamp = new ObjectID().getTimestamp();
我怎样才能得到更精确的东西?
我从我的 MongoDB 数据库中获得了一个时间戳,但它只在几秒钟内精确地返回:
2013 年 6 月 6 日星期四 16:15:22 GMT-0400(东部夏令时间)
我需要更大的粒度。有没有办法以毫秒为单位获取 MongoDB 时间戳?
我正在通过 mongoose 在我的 node.js 服务器上进行调用:
var timestamp = new ObjectID().getTimestamp();
我怎样才能得到更精确的东西?
ObjectId 以秒为精度存储,您无法更改它。因此,如果您需要毫秒粒度的东西,那么您必须存储自己的时间戳值。
我一个接一个地生成时间戳,得到了这些:
ObjectId("586a291570b9a181fc2f61ba").getTimestamp();
ISODate("2017-01-02T10:19:01Z")
对于下一个时间戳:
ObjectId("586a291570b9a181fc2f61bc").getTimestamp();
ISODate("2017-01-02T10:19:01Z")
您会注意到,虽然打印的唯一粒度getTimestamp()
是以秒为单位,但还有一个更进一步的粒度会导致 ObjectId 字符串发生变化,即使它们都在01
秒。
原因:
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
,而不是时间值有关,因此您无法以毫秒为单位。