Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

比较/排序顺序

在此页面上

  • 数值类型
  • 字符串
  • 数组
  • 对象
  • 日期和时间戳
  • Non-existent Fields
  • 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. JavaScript 代码

  14. MaxKey(内部类型)

注意

范围查询运算符仅对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类型排序顺序来比较大量的最大元素。

  • 比较查询操作符(例如$lt$gt )按字典顺序对数组执行比较。

  • 将值为单元素大量的字段(示例[ 1 ] )与非数组字段(示例2 )进行比较时,比较对象是 12

  • 比较空大量(示例[ ] )会将空大量视为小于 null 值或缺失字段值。

  • 嵌套大量的比较(示例[[1, 2], [3, 4]] )会按字典顺序比较最外层大量之后的任何大量。

注意

当查询为大量时,比较查询操作符会实施使用类型范围。如果索引值是大量,则该操作符对索引大量逐元素执行类型括号比较。

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

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

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

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

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

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

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

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

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

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

后退

BSON类型