在_id上的mongodbsorting顺序

我不知道如何mongodb比较“_id”字段进行查询时如下所示:

db.data.find({"_id":{$gt:ObjectId("502aa46c0674d23e3cee6152")}}).sort({"_id":1}).limit(10); 

它纯粹是基于id的时间戳部分?

稍微扩大安德烈所说的话:

由于ObjectID时间戳仅为秒,因此可以使用相同的时间戳值(前4个字节)轻松创build两个(或多个)ObjectID。 如果这些是在同一台机器(机器ID–接下来的3个字节)上创build的,则通过相同的进程(PID–接下来的2个字节)来区分它们,唯一的区别就是“inc”字段,最后3个字节最后。

在这里看到完整的规范:

http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

这个“inc”字段是一个不断递增的字段(那么你可以合理地期望sorting是在插入/创build顺序)还是一个随机值(然后可能是唯一的,但不是有序的),假设规范正确实施。 请注意,ObjectID可能由驱动程序或应用程序(或实际上是手动的)而不是由MongoDB本身生成,所以除非您完全控制它们的生成方式,否则上面的任何或全部都可能适用。

在某种意义上,你是正确的,如果你用_idsorting,你将按插入时间sorting。 这并不意味着唯一的比较是在时间戳部分完成的。 ObjectID是一个BSON对象types,它们可以直接相互比较。 当他们从一个时间戳开始的时候,从逻辑上讲,过去的人会less于未来的人。

你可以在文档中find更多的细节

从Mongo规格复制粘贴http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

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