On this page
Collation
在本页面
3.4 版的新功能。
归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
您可以为集合或视图,索引或支持归类的特定操作指定归类。
Collation Document
归类文档具有以下字段:
{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则时,locale
字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document。
默认排序规则参数值取决于您指定的语言环境。有关默认排序规则参数及其关联的语言环境的完整列表,请参见排序规则默认参数。
Field | Type | Description |
---|---|---|
locale |
string | ICU 语言环境。有关支持的语言环境的列表,请参见支持的语言和语言环境。 |
要指定简单的二进制比较,请指定locale
值"simple"
。
| strength
|整数|可选。要执行的比较级别。对应于ICU 比较级别。可能的值为:
|价值|描述
| 1 |主要比较水平。归类仅对基本字符进行比较,而忽略了其他区别,如变音符号和大小写。 |
| 2 |二级比较。归类进行比较直到次要差异,例如变音符号。即,归类执行基本字符(主要区别)和变音符号(次要区别)的比较。基本字符之间的差异优先于次要差异。 |
| 3 |第三层次的比较。归类执行比较直到三级差异,例如大小写和字母变体。即,排序规则执行基本字符(主要区别),变音符号(次要区别)以及大小写和变体(三次区别)的比较。基本字符之间的差异优先于次要差异,次要差异优先于三次差异。
这是默认级别。 |
| 4 |第四级。仅限于特定用例,以在 1-3 级忽略标点符号时处理标点符号或用于处理日语文本。 |
| 5 |相同级别。限于领带架的特定用例。 |
有关详细信息,请参见ICU 整理:比较级别。
| caseLevel
|布尔值|可选。确定是否包括strength
级别1
或2
的案例比较的标志。
如果为true
,请进行案例比较;即
与strength:1
一起使用时,排序规则比较基本字符和大小写。
与strength:2
一起使用时,排序规则比较基本字符,变音符号(以及其他可能的次要差异)和大小写。
如果为false
,则不包括级别1
或2
的案例比较。默认值为false
。
有关更多信息,请参见ICU 整理:案例级别。
| caseFirst
|字符串|可选。在第三级比较期间确定大小写差异的排序 Sequences 的字段。
可能的值为:
|价值|描述
| “上” |大写在小写之前排序。 |
| “降低” |小写在大写之前排序。 |
| “关闭” |默认值。与"lower"
类似,但有细微差别。有关差异的详细信息,请参见http://userguide.icu-project.org/collation/customization。 ||
| numericOrdering
|布尔值|可选。用于确定将数字字符串比较为数字还是字符串的标志。
如果true
,则比较为数字;即"10"
大于"2"
。
如果是false
,则比较为字符串;即"10"
小于"2"
。
默认值为false
。
| alternate
|字符串|可选。确定排序规则是否应将空格和标点符号视为基本字符以便进行比较的字段。
可能的值为:
|价值|描述
| "non-ignorable"
|空格和标点符号被认为是基本字符。 |
| "shifted"
|空格和标点符号不被视为基本字符,仅在强度级别大于 3 时才被区分。
有关更多信息,请参见ICU 整理:比较级别。
默认值为"non-ignorable"
。
| maxVariable
|字符串|可选。决定alternate: "shifted"
时最多可识别哪些字符的字段。 alternate: "non-ignorable"
无效
可能的值为:
|价值|描述
| "punct"
|空格和标点符号都是“可忽略的”,即不被视为基本字符。 |
| "space"
|空格是“可忽略的”,即不视为基本字符。 ||
| backwards
|布尔值|可选。用于确定是否带有变音符号的字符串从字符串的后面进行排序的标志,例如某些法语词典的排序。
如果是true
,则从后到前进行比较。
如果是false
,则从前向后进行比较。
缺省值为false
。
| normalization
|布尔值|可选。用于确定是否检查文本是否需要规范化并执行规范化的标志。通常,大多数文本不需要此规范化处理。
如果是true
,请检查是否完全标准化,然后执行标准化以比较文本。
如果为false
,则不检查。
默认值为false
。
有关详细信息,请参见http://userguide.icu-project.org/collation/concepts#TOC-Normalization。
支持归类的操作
您可以为以下操作指定排序规则:
Note
您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。
[1] | *(1,2)*某些索引类型不支持排序规则。有关详细信息,请参见排序规则和不支持的索引类型。 |
Behavior
Local Variants
某些归类语言环境具有变体,它们使用特定于语言的规则。要指定语言环境变体,请使用以下语法:
{ "locale" : "<locale code>@collation=<variant>" }
例如,要使用中文排序规则的unihan
变体:
{ "locale" : "zh@collation=unihan" }
有关所有归类语言环境及其变体的完整列表,请参见Collation Locales。
排序规则和视图
您可以在创建时为视图指定默认的collation。如果未指定排序规则,则视图的默认排序规则为“简单”二进制比较排序规则。也就是说,视图不会继承集合的默认排序规则。
视图上的字符串比较使用视图的默认排序规则。尝试更改或覆盖视图的默认排序规则的操作将失败,并显示错误。
如果从另一个视图创建视图,则不能指定与源视图的排序规则不同的排序规则。
如果执行涉及多个视图的聚合(例如$lookup或$graphLookup),则这些视图必须具有相同的collation。
排序规则和索引的使用
要将索引用于字符串比较,操作还必须指定相同的排序规则。也就是说,如果排序规则的索引指定了不同的排序规则,则该索引不能支持对索引字段执行字符串比较的操作。
例如,集合myColl
在具有排序规则语言环境"fr"
的字符串字段category
上具有索引。
db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )
以下查询操作指定与索引相同的排序规则,可以使用索引:
db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )
但是,默认情况下使用“简单”二进制整理程序的以下查询操作不能使用索引:
db.myColl.find( { category: "cafe" } )
对于索引前缀键不是字符串,数组和嵌入式文档的复合索引,指定其他排序规则的操作仍可以使用索引来支持索引前缀键的比较。
例如,集合myColl
在数字字段score
和price
和字符串字段category
上具有复合索引;使用排序规则语言环境"fr"
创建索引以进行字符串比较:
db.myColl.createIndex(
{ score: 1, price: 1, category: 1 },
{ collation: { locale: "fr" } } )
以下使用"simple"
二进制排序规则进行字符串比较的操作可以使用索引:
db.myColl.find( { score: 5 } ).sort( { price: 1 } )
db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )
以下操作将"simple"
二进制排序规则用于在已索引的category
字段上进行字符串比较,可以使用该索引来仅满足查询的score: 5
部分:
db.myColl.find( { score: 5, category: "cafe" } )
排序规则和不支持的索引类型
以下索引仅支持简单的二进制比较,不支持collation:
text indexes,
2d个索引,以及
geoHaystack indexes.
Tip
要在具有非简单排序规则的集合上创建text
,2d
或geoHaystack
索引,必须在创建索引时明确指定{collation: {locale: "simple"} }
。