文档菜单
文档首页
/
MongoDB 手册
/ /

不区分大小写的索引

本页

  • 命令语法
  • 行为
  • 示例
  • 创建一个不区分大小写的索引
  • 默认校对集合上的不区分大小写的索引

不区分大小写的索引支持不区分大小写的字符串比较查询。不区分大小写来自校对.

重要

您可以通过指定 collation 选项使用 db.collection.createIndex() 创建一个不区分大小写的索引

db.collection.createIndex(
{
<field>: <sortOrder>
},
{
collation:
{
locale : <locale>,
strength : < 1 | 2 >
}
}
)

要指定一个不区分大小写的索引的校对,请将以下字段包含在 collation 对象中

字段
描述
locale
指定语言规则。有关可用语言和区域设置的列表,请参阅 支持的语言和区域设置。
strength
确定比较规则。值1或2的强度表示不区分大小写的排序。

有关其他排序字段,请参阅排序。

要使用指定排序的索引,查询和排序操作必须指定与索引相同的排序。如果集合已定义排序,则所有查询和索引都继承该排序,除非它们明确指定不同的排序。

要在没有默认排序规则的集合上使用不区分大小写的索引,请创建一个具有排序规则的索引,并将 strength 参数设置为 12(有关 strength 参数的详细描述,请参阅 排序规则)。为了使用索引级别的排序规则,您必须在查询级别指定相同的排序规则。

以下示例创建了一个没有默认排序规则的集合,然后在 type 字段上添加了一个不区分大小写的索引。

db.createCollection("fruit")
db.fruit.createIndex(
{ type: 1 },
{ collation: { locale: 'en', strength: 2 } }
)

为了使用索引,查询必须指定相同的排序规则。

db.fruit.insertMany( [
{ type: "apple" },
{ type: "Apple" },
{ type: "APPLE" }
] )
db.fruit.find( { type: "apple" } ) // does not use index, finds one result
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 2 } )
// uses the index, finds three results
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 1 } )
// does not use the index, finds three results

当您创建一个具有默认排序规则的集合时,除非您指定不同的排序规则,否则您创建的所有索引都将继承该排序规则。所有未指定不同排序规则的查询也将继承默认排序规则。

以下示例创建了一个名为 names 的集合,具有默认排序规则,然后在该集合的 first_name 字段上创建了一个索引。

db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } )
db.names.createIndex( { first_name: 1 } ) // inherits the default collation

插入一小批名字

db.names.insertMany( [
{ first_name: "Betsy" },
{ first_name: "BETSY"},
{ first_name: "betsy"}
] )

对这个集合的查询默认使用指定的排序规则,并在可能的情况下使用索引。

db.names.find( { first_name: "betsy" } )
// inherits the default collation: { collation: { locale: 'en_US', strength: 2 } }
// finds three results

上述操作使用集合的默认排序规则并找到了所有三个文档。它使用 first_name 字段的索引以提高性能。

仍然可以通过在查询中指定不同的排序规则来对这个集合执行大小写敏感的搜索

db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } )
// does not use the collection's default collation, finds one result

上述操作仅找到了一个文档,因为它使用了一个未指定 strength 值的排序规则。它没有使用集合的默认排序规则或索引。

返回

属性