Docs 菜单

Docs 主页开发应用程序MongoDB Manual

比较/排序顺序

在此页面上

  • 数值类型
  • 字符串
  • 数组
  • 对象
  • 日期和时间戳
  • 不存在的字段
  • BinData

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

  1. MinKey(内部类型)

  2. null

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

  4. 符号,字符串

  5. 对象

  6. 阵列

  7. BinData

  8. ObjectId

  9. 布尔

  10. Date

  11. 时间戳

  12. 正则表达式

  13. MaxKey(内部类型)

注意

$range 查询和聚合操作符仅对 BSON 类型与查询值的类型相匹配的字段执行比较。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 值或缺少字段值。

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. MaxKey(内部类型)

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

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

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

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

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

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

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

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

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

← BSON类型