文档菜单
文档首页
/
MongoDB 手册
/ /

比较/排序顺序

本页内容

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

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

  1. MinKey(内部类型)

  2. 空值

  3. 数字(整数、长整数、双精度浮点数、十进制数)

  4. 符号、字符串

  5. 对象

  6. 数组

  7. BinData

  8. ObjectId

  9. 布尔值

  10. 日期

  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. 空值

    3. 数字(整数、长整数、双精度浮点数、十进制数)

    4. 符号、字符串

    5. 对象

    6. 数组

    7. BinData

    8. ObjectId

    9. 布尔值

    10. 日期

    11. 时间戳

    12. 正则表达式

    13. JavaScript代码

    14. MaxKey(内部类型)

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

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

  5. 如果字段值相等,比较下一个键值对(回到步骤1)。没有进一步对的对象小于有进一步对的对象。

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

比较时将不存在的字段视为null。在文档 { }{ a: null } 中的 a 字段上进行排序会将这些文档视为排序顺序相同。

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

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

  2. 然后,按照BSON的单字节子类型。

  3. 最后,按照数据,执行无符号字节的逐字节比较。

返回

BSON 类型