Comparison/Sort Order
在本页面
比较不同BSON types的值时,MongoDB 使用以下比较 Sequences,从最低到最高:
-
MinKey(内部类型)
-
Null
-
数字(整数,整数,双精度数,小数)
-
Symbol, String
-
Object
-
Array
-
BinData
-
ObjectId
-
Boolean
-
Date
-
Timestamp
-
Regular Expression
-
MaxKey(内部类型)
Numeric Types
为了进行比较,MongoDB 将某些类型视为等效。例如,数字类型在比较之前先进行转换。
Strings
Binary Comparison
默认情况下,MongoDB 使用简单的二进制比较来比较字符串。
Collation
3.4 版的新功能。
Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
整理规范具有以下语法:
{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则时,locale
字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document。
如果没有为集合或操作指定排序规则,则 MongoDB 使用先前版本中使用的简单二进制比较进行字符串比较。
Arrays
对于数组,小于比较或升序排序比较数组的最小元素,大于大于或降序排序比较数组的最大元素。这样,当将其值为单元素数组(例如[ 1 ]
)的字段与非数组字段(例如2
)进行比较时,比较是在1
和2
之间。比较空数组(例如[ ]
)会将空数组视为小于null
或缺少字段。
Objects
MongoDB 对BSON个对象的比较使用以下 Sequences:
-
以键值对在 BSON 对象中出现的 Sequences 递归比较它们。
-
比较关键字段名称。
-
如果关键字段名称相等,则比较字段值。
-
如果字段值相等,则比较下一个键/值对(返回步骤 1)。没有其他对的对象小于具有其他对的对象。
日期和时间戳
在版本 3.0.0 中更改:日期对象在时间戳对象之前排序。以前的 Date 和 Timestamp 对象一起排序。
Non-existent Fields
比较将不存在的字段视为空 BSON 对象。这样,对文档{ }
和{ a: null }
中的a
字段进行排序将按照排序 Sequences 将文档视为等效。
BinData
MongoDB 按以下 Sequences 对BinData
进行排序:
-
首先,数据的长度或大小。
-
然后,通过 BSON 的一字节子类型。
-
最后,根据数据执行逐字节比较。