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)进行比较时,比较是在12之间。比较空数组(例如[ ])会将空数组视为小于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 的一字节子类型。

  • 最后,根据数据执行逐字节比较。