比较/排序顺序
在比较不同BSON类型的值进行排序操作时,MongoDB使用以下比较顺序,从低到高
MinKey(内部类型)
空值
数字(整数、长整数、双精度浮点数、十进制数)
符号、字符串
对象
数组
BinData
ObjectId
布尔值
日期
时间戳
正则表达式
JavaScript代码
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
值或缺失的字段值。嵌套数组的比较(例如,
[[1, 2], [3, 4]]
)将最外层数组之后的任何数组进行字典序比较。
注意
比较查询运算符在查询为数组时强制类型括号。如果索引值是数组,则运算符在索引数组上逐元素执行类型括号比较。
对象
MongoDB比较BSON对象使用以下顺序
递归比较BSON对象中出现的键值对顺序。
比较字段类型。MongoDB按以下顺序比较字段类型,从低到高
MinKey(内部类型)
空值
数字(整数、长整数、双精度浮点数、十进制数)
符号、字符串
对象
数组
BinData
ObjectId
布尔值
日期
时间戳
正则表达式
JavaScript代码
MaxKey(内部类型)
如果字段类型相等,比较键字段名称。
如果键字段名称相等,比较字段值。
如果字段值相等,比较下一个键值对(回到步骤1)。没有进一步对的对象小于有进一步对的对象。
日期和时间戳
日期对象排序在时间戳对象之前。
不存在的字段
比较时将不存在的字段视为null。在文档 { }
和 { a: null }
中的 a
字段上进行排序会将这些文档视为排序顺序相同。
BinData
MongoDB按照以下顺序对BinData
进行排序
首先,数据的长度或大小。
然后,按照BSON的单字节子类型。
最后,按照数据,执行无符号字节的逐字节比较。