Docs 主页 → 开发应用程序 → MongoDB Manual
比较/排序顺序
在排序操作中比较不同 BSON 类型 的值时,MongoDB 使用以下从低到高的比较顺序:
-
MinKey(内部类型)
-
null
-
数值(int、long、double、decimal)
-
符号,字符串
-
对象
-
阵列
-
BinData
-
ObjectId
-
布尔
-
Date
-
时间戳
-
正则表达式
-
MaxKey(内部类型)
数值类型
出于比较目的,MongoDB 会将某些类型视为等效类型。对于实例来说,数字类型在比较之前会进行转换。
字符串
二进制比较
默认情况下,MongoDB 使用简单的二进制比较来比较字符串。
排序规则
排序规则 允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则。
排序规则规范具有以下语法:
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
指定排序规则时,
locale
字段为必填字段;所有其他排序规则字段均为可选字段。有关字段的说明,请参阅
排序规则文档
。
如果没有为收集或操作指定排序规则,MongoDB 将使用先前版本中使用的简单二进制比较来进行字符串比较。
数组
在数组比较时:
-
小于比较,或是升序排序,根据 BSON 类型排序顺序来比较数组的最小元素。
-
大于比较,或是降序排序,根据反向 BSON 类型排序顺序来比较数组的最大元素。
-
比较值为单元素数组的字段(如
[ 1 ]
)与非数组字段(如2
)时,比较对象为1
和2
。 -
比较空数组(如
[ ]
)时将空数组视为小于null
值或缺少字段值。
对象
MongoDB 对 BSON 对象的比较使用以下顺序:
-
按照 BSON 对象中键值对出现的顺序递归比较键值对。
-
比较字段类型。MongoDB 对字段类型使用以下从低到高的比较顺序:
-
MinKey(内部类型)
-
null
-
数值(int、long、double、decimal)
-
符号,字符串
-
对象
-
阵列
-
BinData
-
ObjectId
-
布尔
-
Date
-
时间戳
-
正则表达式
-
MaxKey(内部类型)
-
-
如果字段类型相同,则比较 键字段名称 。
-
如果键字段名称相同,则比较字段值。
-
如果字段值相同,则比较下一键/值对(返回步骤 1)。没有更多键值对的对象小于有更多键值对的对象。
日期和时间戳
日期对象排序在时间戳对象之前。
不存在的字段
比较时,会将不存在的字段视为空 BSON 对象。因此,对文档
{ }
和
{
a: null }
中的
a
字段进行排序时会将这些文档视为采用了等同排序顺序。
BinData
MongoDB 按以下顺序对
BinData
进行排序:
-
首先,数据的长度或大小。
-
然后,按 BSON 一字节子类型进行比较。
-
最后,通过数据执行逐字节比较。