cursor.collation()
定义
cursor.collation(<collation document>)
重要
mongosh 方法
本页面提供
mongosh
方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
指定 返回的游标的
db.collection.find()
排序规则 。要使用,请附加到db.collection.find()
。cursor.collation()
接受以下排序规则文档:{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } 指定排序规则时,
locale
字段为必填字段;所有其他排序规则字段均为可选字段。有关字段的说明,请参阅排序规则文档。字段类型说明locale
字符串ICU 语言环境。有关支持的语言环境列表,请参阅支持的语言和语言环境。
要指定简单的二进制比较,请指定
"simple"
的locale
值。strength
整型可选。要执行的比较级别。对应于 ICU 比较级别。可能的值为:
值说明1主要比较级别。排序规则仅对基本字符进行比较,忽略其他差异,例如变音符号和大小写。2次要比较级别。排序规则会比较次要差异,例如变音符号。也就是说,排序规则会执行基本字符(主要差异)和变音符号(次要差异)的比较。基本字符之间的差异优先于次要差异。3第三级比较。排序规则会比较第三级差异,例如大小写和字母变体。也就是说,排序规则执行基本字符(主要差异)比较、变音符号(次要差异)比较以及大小写和字母变体(第三级差异)比较。基本字符之间的差异优先于次要差异,而次要差异又优先于第三级差异。
这是默认级别。
4第四级。仅限于特定使用场景,可考虑前三个级别忽略的标点符号,或者用于处理日语文本。5等同级别。仅限于无法比较出差异的特定用例。有关详细信息,请参阅 ICU 排序规则:比较级别。
caseLevel
布尔可选。此标志用于确定是否在
strength
级别为1
或2
时进行大小写比较。如果
true
,则包括大小写比较;即当与
strength:1
一起使用时,排序规则会比较基本字符和大小写。当与
strength:2
一起使用时,排序规则会比较基本字符、变音符号(以及可能的其他次要差异)和大小写。
如果其值为
false
,则在1
级别或2
级别不不包括大小写比较。默认值为false
。有关更多信息,请参阅 ICU 排序规则:大小写级别。
caseFirst
字符串可选。此字段用于确定第三级比较期间大小写差异的排序顺序。
可能的值为:
值说明"upper"大写字母排序在小写字母之前。"lower"小写字母排序在大写字母之前。“关闭”默认值。与"lower"
类似,但略有不同。请参阅 https://unicode-org.github.io/icu/userguide/strings/properties.html#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
。有关详细信息,请参阅 https://unicode-org.github.io/icu/userguide/collation/concepts.html#normalization。
示例
请考虑包含以下文档的集合 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();
注意
您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果执行带排序的查找,则不能使用一种排序规则进行查找而另一种排序规则进行排序。