【MongoDB】索引属性 之 不区分大小写的索引(Case Insensitive Indexes)

本章内容:

  • 行为
  • 例子
    • 创建不区分大小写的索引
    • 具有默认排序规则的集合中不区分大小写的索引

3.4版的新功能。

不区分大小写的索引支持在不考虑大小写的情况下的字符串的比较查询。

使用db.collection.createIndex()并指定collation 参数选项,创建不区分大小写的索引。例如:

db.collection.createIndex( { "key" : 1 },

                           { collation: {

                               locale : <locale>,

                               strength : <strength>

                             }

                           } )

要为区分大小写的索引指定collation(排序规则),包括:

  • Locale(语言环境):指定语言规则。有关可用语言环境的列表,请参见语言排序规则
  • Strength(强度):确定比较规则。值1或2表示不区分大小写的排序规则。

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

 

一、行为

使用不区分大小写的索引不会影响查询的结果,但是可以提高性能。有关索引的成本和收益的详细讨论,请参见索引

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

二、例子

1.创建不区分大小写的索引

要在没有默认排序规则(collation)的集合上使用不区分大小写的索引,应该创建一个具有排序规则的索引,并将强度strength参数设置为1或2(有关强度参数的详细说明,请参见排序规则)。必须在查询级别指定相同的排序规则,才能使用索引级别的排序规则。

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

db.createCollection("fruit")


db.fruit.createIndex( { type: 1},

                 { collation: { locale: 'en', strength: 2 } } )

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

db.fruit.insert( [ { 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

2.具有默认排序规则的集合中不区分大小写的索引

使用默认排序规则创建集合时,除非指定其他排序规则,否则随后创建的所有索引都会继承该排序规则。所有未指定其他归类的查询也将继承默认归类。

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

db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } )


db.names.createIndex( { first_name: 1 } ) // inherits the default collation

插入数据到names集合:

db.names.insert( [ { 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

上述操作仅查找一个文档,因为它使用未指定强度值的排序规则。它不使用集合的默认排序规则或索引。

 

参考:https://docs.mongodb.com/manual/core/index-case-insensitive/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值