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级别12的案例比较的标志。
如果为true,请进行案例比较;即
strength:1一起使用时,排序规则比较基本字符和大小写。
strength:2一起使用时,排序规则比较基本字符,变音符号(以及其他可能的次要差异)和大小写。
如果为false,则不包括级别12的案例比较。默认值为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

您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。

Commands mongo Shell 方法
create db.createCollection()

db.createView()
createIndexes [1] db.collection.createIndex() [1]
aggregate db.collection.aggregate()
distinct db.collection.distinct()
findAndModify db.collection.findAndModify()
db.collection.findOneAndDelete()
db.collection.findOneAndReplace()
db.collection.findOneAndUpdate()
find cursor.collation()db.collection.find()指定排序规则
mapReduce db.collection.mapReduce()
delete db.collection.deleteOne()
db.collection.deleteMany()
db.collection.remove()
update db.collection.update()
db.collection.updateOne(),
db.collection.updateMany(),
db.collection.replaceOne()
shardCollection sh.shardCollection()
db.collection.bulkWrite()中的个别更新,替换和删除操作。
[1] *(12)*某些索引类型不支持排序规则。有关详细信息,请参见排序规则和不支持的索引类型

Behavior

Local Variants

某些归类语言环境具有变体,它们使用特定于语言的规则。要指定语言环境变体,请使用以下语法:

{ "locale" : "<locale code>@collation=<variant>" }

例如,要使用中文排序规则的unihan变体:

{ "locale" : "zh@collation=unihan" }

有关所有归类语言环境及其变体的完整列表,请参见Collation Locales

排序规则和视图

排序规则和索引的使用

要将索引用于字符串比较,操作还必须指定相同的排序规则。也就是说,如果排序规则的索引指定了不同的排序规则,则该索引不能支持对索引字段执行字符串比较的操作。

例如,集合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在数字字段scoreprice和字符串字段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

Tip

要在具有非简单排序规则的集合上创建text2dgeoHaystack索引,必须在创建索引时明确指定{collation: {locale: "simple"} }

首页