0

mongodb如何对_ids应用比较运算符和排序?它是通过_id 的时间戳部分来完成的吗?另外,如果 objectId 是在客户端或服务器上生成的,是否会有所不同?

如果是这样,分页在这个领域是否可靠?例如_id: { $gte: last_idOnPage }

4

2 回答 2

2

时间戳是BSON::ObjectId价值的第一部分。所以基本上是的,它首先按时间戳排序,然后按其他部分排序。

于 2013-10-31T06:55:35.543 回答
1

查看有关ObjectId()的文档,您可以看到 _id 是一个十六进制字符串,它代表 12 字节的数字,包括:

  • 表示自 Unix 纪元以来的秒数的 4 字节值,
  • 3 字节机器标识符,
  • 2 字节进程 ID,以及
  • 3 字节计数器,以随机值开始。

因此,部分您是正确的:它也使用时间戳对值进行排序。但也使用了其他部分。因为这个字符串代表一个数字,mongo 只是比较数字来找出哪个更大。

关于你的第二个问题(它是否有区别是由应用层或数据库生成的_id):它没有任何区别。Mongo 仍然只比较数字。

于 2013-10-31T08:45:41.037 回答