mongodb如何通过_id进行比较/排序?

时间:2013-10-31 06:51:17

标签: node.js mongodb mongoose

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

如果是这样,这个字段的分页是否可靠?例如_id: { $gte: last_idOnPage }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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