进入MongoDB中文手册(4.2版本)目录
比较不同BSON类型的值时,MongoDB使用以下从小到大的顺序比较:
- 1 MinKey (内部类型)
- 2 Null
- 3 Numbers (ints, longs, doubles, decimals)
- 4 Symbol, String
- 5 Object
- 6 Array
- 7 BinData
- 8 ObjectId
- 9 Boolean
- 10 Date
- 11 Timestamp
- 12 Regular Expression
- 13 MaxKey (内部类型)
1 数值类型
为了进行比较,MongoDB将某些类型视为等效的。例如,数值类型在比较之前先转换成同一类型。
2 字符串
2.1 二进制比较
默认情况下,MongoDB使用简单的二进制比较来比较字符串。
2.2 Collation
3.4版的新功能。
Collation允许用户指定特定语言的字符串比较的规则,例如字母大写和重音符号的规则。
Collation规范具有以下语法:
{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则(collation)时,locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation文档。
如果没有为集合或操作指定排序规则(collection),则MongoDB使用先前版本中使用的简单二进制比较(simple binary comparison)进行字符串比较。
3 数组
对于数组而言,小于比较或者升序排序比较的是数组中最小的元素,大于比较或者降序排序比较的是数组中最大的元素。例如,比较一个只有一个元素的数组类型字段(例如 [ 1 ]))和非数组字段(例如2),比较的是1和2。空数组(例如[])的比较被看作是小于空(null)或被看作丢失的字段。
4 对象
MongoDB对BSON对象使用以下顺序比较:
- 按键值对在BSON对象中出现的顺序递归比较它们;
- 比较健字段名称(key field names);
- 如果键字段名称相等,则比较字段值;
- 如果字段值相等,则比较下一个键/值对(返回步骤1)。没有其他键值对的对象小于具有其他键值对的对象。
5 日期和时间戳
日期对象排序排在时间戳对象之前。
6 不存在的字段
不存在的字段在比较时被视为空BSON对象。因此,对文档{ }和文档{a: null}的排序认为是相等的。
7 二进制数据
MongoDB对BinData的排序参照以下顺序:
- 首先,数据的长度或大小;
- 然后,BSON的单字节类型(one-byte subtype);
- 最后,基于数据,逐个字节比较。