对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

比较/排序顺序

在排序操作中比较不同 BSON 类型的值时,MongoDB 使用以下从低到高的比较顺序:

  1. MinKey(内部类型)

  2. null

  3. 数值(int、long、double、decimal)

  4. 符号,字符串

  5. 对象

  6. 阵列

  7. BinData

  8. ObjectId

  9. 布尔

  10. Date

  11. 时间戳

  12. 正则表达式

  13. JavaScript代码

  14. 带作用域的 JavaScript 代码

  15. MaxKey(内部类型)

聚合表达式可进行跨类型比较。有关详细信息,请参阅比较操作符。

注意

MongoDB仅对目标字段的BSON类型通过 类型范围 与查询操作数类型匹配的文档强制使用 比较查询谓词操作符 进行比较。

出于比较目的,MongoDB 会将某些类型视为等效类型。例如,所有数字类型在比较中都被视为等效的类型。

默认情况下,MongoDB 使用简单的二进制比较来比较字符串。

排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则。

排序规则规范具有以下语法:

{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

指定排序规则时,locale 字段为必填字段;所有其他排序规则字段均为可选字段。有关字段的说明,请参阅排序规则文档

如果没有为收集或操作指定排序规则,MongoDB 将使用先前版本中使用的简单二进制比较来进行字符串比较。

对包含数组的字段进行排序时:

  • 升序排序会根据BSON类型排序顺序来比较大量的最小元素。

  • 降序排序会根据反向BSON类型排序顺序来比较大量的最大元素。

  • 对值为单元素数组的字段(示例:[ 1 ])和值为非数组的字段(示例:2)进行排序时,排序对象是 12

  • 排序会将空数组(例如 [ ])放在 null 值或缺失字段值之前。

  • 某种嵌套数组(例如 [[1, 2], [3, 4]])会按字典顺序对最外层数组之后的任何数组进行排序。

当您查询包含数组的字段时:

  • 比较查询谓词操作符,例如 $lt$gt,在查询值为数组时实施 类型括号

  • 如果目标字段的值是一个数组,则该操作符对该数组逐元执行类型括号比较。

  • 比较操作符按字典顺序比较数组。

MongoDB 对 BSON 对象的比较使用以下顺序:

  1. 按照 BSON 对象中键值对出现的顺序递归比较键值对。

  2. 比较字段类型。MongoDB 对字段类型使用以下从低到高的比较顺序:

    1. MinKey(内部类型)

    2. null

    3. 数值(int、long、double、decimal)

    4. 符号,字符串

    5. 对象

    6. 阵列

    7. BinData

    8. ObjectId

    9. 布尔

    10. Date

    11. 时间戳

    12. 正则表达式

    13. JavaScript代码

    14. 带作用域的 JavaScript 代码

    15. MaxKey(内部类型)

  3. 如果字段类型相同,则比较键字段名称

  4. 如果键字段名称相同,则比较字段值。

  5. 如果字段值相同,则比较下一键/值对(返回步骤 1)。没有更多键值对的对象小于有更多键值对的对象。

日期对象排序在时间戳对象之前。

该比较会将不存在的字段视为空值。 对文档 { }{ a: null } 中的 a字段进行排序时,会将这些文档视为采用了等效排序顺序。

MongoDB 按以下顺序对 BinData 进行排序:

  1. 首先,数据的长度或大小。

  2. 然后,按 BSON 一字节子类型进行比较。

  3. 最后,通过数据,对无符号字节执行逐字节比较。