我想知道mongodb在执行查询时如何比较"_id"字段,如下所示:
db.data.find({"_id":{$gt:ObjectId("502aa46c0674d23e3cee6152")}}).sort({"_id":1}).limit(10);
Run Code Online (Sandbox Code Playgroud)
它纯粹基于id的时间戳部分吗?
Ada*_*ord 45
稍微扩大Andre所说的内容:
由于ObjectID时间戳仅为第二个,因此可以使用相同的时间戳值(前4个字节)轻松创建两个(或更多)ObjectID.如果这些是在同一台机器上创建的(机器ID - 接下来的3个字节),通过相同的进程(PID - 接下来的2个字节),那么区分它们的唯一方法就是"inc"字段,最后3个字节在末尾.
请参阅此处查看完整规格:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
假设规范正确实施,那个"inc"字段要么是一个不断增加的字段(然后你可以合理地期望排序在插入/创建顺序中)或随机值(然后可能是唯一的,但不是有序的) .请注意,ObjectID可以由驱动程序或应用程序(或实际上是手动)而不是MongoDB本身生成,因此除非您完全控制它们的生成方式,否则上述任何或所有可能都适用.
and*_*yro 13
来自Mongo规范的复制粘贴 https://docs.mongodb.com/manual/reference/bson-types/#objectid
ObjectId值的顺序与生成时间之间的关系在一秒内不严格.如果单个系统上的多个系统或多个进程或线程在一秒钟内生成值; ObjectId值不代表严格的插入顺序.客户端之间的时钟偏差也会导致非严格的排序,即使是值,因为客户端驱动程序生成ObjectId值,而不是mongod进程.