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

我可以从MongoDB时间戳中获得更大的粒度吗?,mongodb,timestamp,mongoose,precision,milliseconds,Mongodb,Timestamp,Mongoose,Precision,Milliseconds,我从我的MongoDB数据库中获得了一个时间戳,但它只在几秒钟内准确返回: 2013年6月6日星期四16:15:22 GMT-0400(东部夏时制) 我需要更大的粒度。有没有一种方法可以获得精度为毫秒的MongoDB时间戳 我正在通过mongoose在node.js服务器上进行调用: var timestamp = new ObjectID().getTimestamp(); 如何获得更精确的内容?objectid以秒的精度存储,您无法更改它。因此,如果您需要毫秒级的粒度,那么您必须存储自己的

我从我的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

:


因此,真正的粒度是根据MongoDB生成的32位序号。它与一秒钟内的
操作相关,而与时间值无关,因此不能以毫秒为单位获得它。

这很不幸。我之所以使用Mongo的时间戳,是因为我认为我的节点主机在两台不同的机器上运行我的服务器,这意味着一个请求中的Date.now()实际时间可能比下一个请求中的要长。Mongo是当时集中化的一种方式。有没有另一个集中式来源,我可以获得毫秒精度的时间,而不会因为可能有两个不同的节点服务器而受到影响?我使用了不同的方法从mongod进程获得相同的时间。private Date getDBTime(){return(Date)db.eval(“function(){return new Date()}”);}为新文档生成ObjectId()时,生成它的是客户端(即驱动程序),而不是服务器。@MikePateras:对其执行getTime(),它将以毫秒精度打印.db.eval(“return Date().getTime();”,done);像那样?仍然只有几秒钟@AsyKamasky你是说我要取回节点服务器的时间,而不是数据库的时间?我没有注意到使用Mongo时间戳的任何计时问题,但我肯定使用了服务器的系统时间。
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.