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类型

来年

扩展 JSON (v 2 )