我从我的MongoDB数据库中获取了一个时间戳,但它只在几秒钟内以精确度返回:
Thu Jun 06 2013 16:15:22 GMT-0400(Eastern Daylight Time)
我需要更大的粒度。有没有办法在几毫秒内获得具有精度的MongoDB时间戳?
我正在通过mongoose在我的node.js服务器上进行调用:
var timestamp = new ObjectID().getTimestamp();
我怎样才能获得更精确的东西?
答案 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
秒。
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
有关,而与时间值无关,因此您无法以毫秒为单位获取它。