当我们在Mongo中运行一个没有指定任何排序顺序的find()查询时,数据库内部使用什么来对结果进行排序?
根据mongo网站上的文档:
执行没有参数的find()时,数据库以正向自然顺序返回对象。
对于标准表,自然顺序并不特别有用,因为虽然顺序通常接近插入顺序,但不能保证是这样的。但是,对于Capped Collections,自然顺序保证是插入顺序。这非常有用。
然而,对于标准集合(非capped collections),用于对结果进行排序的字段是什么?是_id字段还是其他字段?
编辑:
基本上,我想要了解的是如果我执行以下搜索查询:
db.collection.find({"x":y}).skip(10000).limit(1000);
在不同的时间点t1和t2,以下情况会得到不同的结果:
- t1和t2之间没有其他写入操作时?
- t1和t2之间有新的写入操作时?
- t1和t2之间添加了新的索引时?
我已经在临时数据库上运行了一些测试,对于所有三种情况,我的测试结果都相同(是),但我想要确认并且我确定我的测试案例并不是非常全面。
{createdAt:-1}
)是实现乐观 UI 模式(在创建/更新/删除后不等待服务器响应即可更新缓存中的数据列表)所必需的。否则,您无法匹配客户端乐观顺序和服务器响应顺序。 - Eric Burel