cursor.collation()

在本页面

Definition

  • cursor. collation(* *)
    • 3.4 版的新功能。

db.collection.find()返回的光标指定collation。要使用,请附加到db.collection.find()

cursor.collation()接受以下归类文档:

{
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

指定排序规则时,locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document

FieldTypeDescription
localestringICU 语言环境。有关支持的语言环境的列表,请参见支持的语言和语言环境


要指定简单的二进制比较,请指定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

Examples

考虑包含以下文档的集合foo

{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "A" }
{ "_id" : 3, "x" : "á" }

以下操作将查询过滤器指定为x: "a"。该操作还包括带有locale: "en_US"(美国英语语言环境)和strength: 1(仅比较基本字符;即忽略大小写和变音符号)的排序规则选项:

db.foo.find( { x: "a" } ).collation( { locale: "en_US", strength: 1 } )

该操作返回以下文档:

{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "A" }
{ "_id" : 3, "x" : "á" }

如果您未指定排序规则,即db.collection.find( { x: "a" } ),则查询将仅匹配以下文档:

db.foo.find( { x: "a" } )

您可以将其他游标方法(例如cursor.sort()cursor.count())链接到cursor.collation()

db.collection.find({...}).collation({...}).sort({...});
db.collection.find({...}).collation({...}).count();

Note

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