说明
Bulk.find.collation(<document>)指定批量写入的排序规则。 附加到
Bulk.find()方法,为查找操作指定排序规则。Bulk.find.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。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
例子
集合 restaurants 包含以下文档:
db.restaurants.insertMany( [ { _id: 1, category: "café", status: "Open" }, { _id: 2, category: "cafe", status: "open" }, { _id: 3, category: "cafE", status: "open" } ] )
以下示例为collection初始化Bulk() restaurants操作构建器,并为查找筛选器指定排序规则。
var bulk = db.restaurants.initializeUnorderedBulkOp(); bulk.find( { category: "cafe" } ).collation( { locale: "fr", strength: 1 } ).update( { $set: { status: "closed", points: "0" } } ); bulk.execute();
{ acknowledged: true, insertedCount: 0, insertedIds: {}, matchedCount: 3, modifiedCount: 3, deletedCount: 0, upsertedCount: 0, upsertedIds: {} }
该操作指定带有 strength: 1 的排序规则,这意味着排序规则忽略大小写和字母变体之间的差异。因此,即使只有一个文档与过滤(cafe) 中指定的字符串完全匹配,该操作也会匹配并更新集合中的所有文档。
批量操作完成后,集合将包含以下文档:
[ { _id: 1, category: 'café', status: 'closed', points: '0' }, { _id: 2, category: 'cafe', status: 'closed', points: '0' }, { _id: 3, category: 'cafE', status: 'closed', points: '0' } ]