当前位置: 首页 > 知识库问答 >
问题:

当没有指定排序顺序时,MongoDB如何对记录进行排序?

华懿轩
2023-03-14

当我们运行一个Mongo find()查询而没有指定任何排序顺序时,数据库内部使用什么对结果进行排序?

根据mongo网站上的文件:

在不带参数的情况下执行find()时,数据库将按前向自然顺序返回对象。

db.collection.find({"x":y}).skip(10000).limit(1000);
  1. 当t1和T2之间没有其他写操作时?
  2. 当t1和T2之间有新的写操作时?
  3. 在t1和T2之间添加了新索引?

我在一个临时数据库上运行了一些测试,我得到的结果是相同的(是的)所有3个案例--但我想确定,我确定我的测试案例不是很彻底。

共有1个答案

澹台聪
2023-03-14

默认的内部排序顺序(或自然顺序)是未定义的实现细节。对于存储引擎来说,维护顺序是额外的开销,而且MongoDB的API并不要求除了显式的sort()或具有相关使用限制的固定大小的上限集合的特例之外的可预测性。对于典型的工作负载,希望存储引擎尝试重用可用的预分配空间,并决定如何在磁盘和内存中最有效地存储数据

在没有任何查询条件的情况下,存储引擎将按自然顺序(也就是按找到结果的顺序)返回结果。结果顺序可能与插入顺序一致,但这种行为不能保证,也不能依赖(除了上限集合)。

一些可能影响存储(自然)顺序的例子:

    null
 类似资料:
  • 问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见

  • 问题内容: 我需要发送查询以检索具有特定字符组的值,如下所示: 假设我对“ XX”感兴趣,因此它应该搜索其值以“ XX”开头或具有“ XX”(空格XX)的任何字段。例如,并且是有效的结果。 我有以下查询, 返回正确的结果,但我需要对它们进行排序 ,使其首先返回开头的内容,然后返回其他结果。如下: 码 问题答案: 使用JPQL(HQL) : 有条件 有了很多麻烦。首先,您必须在子句中使用本机SQL

  • 问题内容: MongoDB菜鸟在这里… 好的,我有一个学生集合,每个学生的记录看起来都如下所示:我想按降序对“类型”:“作业”分数进行排序。 mongo外壳上的咒语是什么样的? 我正在尝试这个咒语… 但它不起作用。 问题答案: 您将需要在应用程序代码中或在MongoDB 2.2中使用新的AggregationFramework来操纵嵌入式数组。 Shell中的示例聚合: 样本输出:

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast

  • 问题内容: 我需要发送查询以检索具有特定字符组的值,如下所示: 可以说我对“ XX”感兴趣,因此它应该搜索其值以“ XX”开头或具有“ XX”(空格XX)的任何字段。例如,并且是有效的结果。 我有以下查询, 返回正确的结果,但我需要对它们进行排序 ,使其首先返回开头的内容,然后返回其他结果。如下: 码 问题答案: 使用JPQL(HQL) : 有条件 有了很多麻烦。首先,您必须在子句中使用本机SQL

  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。