mongodb如何对_ids应用比较运算符和排序?它是通过_id 的时间戳部分来完成的吗?另外,如果 objectId 是在客户端或服务器上生成的,是否会有所不同?
如果是这样,分页在这个领域是否可靠?例如_id: { $gte: last_idOnPage }
时间戳是BSON::ObjectId
价值的第一部分。所以基本上是的,它首先按时间戳排序,然后按其他部分排序。
查看有关ObjectId()的文档,您可以看到 _id 是一个十六进制字符串,它代表 12 字节的数字,包括:
因此,部分您是正确的:它也使用时间戳对值进行排序。但也使用了其他部分。因为这个字符串代表一个数字,mongo 只是比较数字来找出哪个更大。
关于你的第二个问题(它是否有区别是由应用层或数据库生成的_id):它没有任何区别。Mongo 仍然只比较数字。