比较和排序


进入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对象使用以下顺序比较:

  1. 按键值对在BSON对象中出现的顺序递归比较它们;
  2. 比较健字段名称(key field names);
  3. 如果键字段名称相等,则比较字段值;
  4. 如果字段值相等,则比较下一个键/值对(返回步骤1)。没有其他键值对的对象小于具有其他键值对的对象。

5 日期和时间戳

日期对象排序排在时间戳对象之前。

6 不存在的字段

不存在的字段在比较时被视为空BSON对象。因此,对文档{ }和文档{a: null}的排序认为是相等的。

7 二进制数据

MongoDB对BinData的排序参照以下顺序:

  1. 首先,数据的长度或大小;
  2. 然后,BSON的单字节类型(one-byte subtype);
  3. 最后,基于数据,逐个字节比较。

进入MongoDB中文手册(4.2版本)目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值