MongoDB _id(ObjectId)是按升序生成的吗?

Zah*_*hra 13 mongodb objectid

我知道当文档插入集合时,_id列如何包含时间戳的表示.这是一个将其转换为时间戳的在线实用程序:http://steveridout.github.io/mongo-object-time/

我想知道的是,对象id字符串本身是否保证维持升序?即这种比较总是返回真实吗?

"newest object id" > "second newest object id"

zer*_*323 20

不,没有任何保证.从官方文档:

ObjectId值的顺序与生成时间之间的关系在一秒内不严格.如果单个系统上的多个系统或多个进程或线程在一秒钟内生成值; ObjectId值不代表严格的插入顺序.客户端之间的时钟偏差也会导致非严格的排序,即使是值,因为客户端驱动程序生成ObjectId值,而不是mongod进程.


Yon*_* Hu 6

对于mongo version >= 3.4,Objectid 生成稍有改变。它的结构是:

  • 一个 4 字节的值,表示自 Unix 纪元以来的秒数,
  • 一个 5 字节的随机值,以及
  • 一个 3 字节的计数器,从一个随机值开始。

所以前 4 个字节仍然是 Unix 纪元以来的秒数,它仍然几乎是上升的,但不是严格的。

https://docs.mongodb.com/manual/reference/bson-types/#objectid


小智 5

_id:ObjectId(4个字节的时间戳,3个字节的机器ID,2个字节的进程ID,3个字节的增量器)

这是id结构。因此,仅最后3个字节将唯一增加。因此,您的问题的答案是肯定的。