Índices sensíveis a maiúsculas e minúsculas suportam consultas que realizam comparações de string sem considerar maiúsculas e minúsculas. A insensibilidade a maiúsculas e minúsculas é derivada doagrupamento .
Importante
Os índices sensíveis a maiúsculas e minúsculas não melhoram o desempenho das queries$regex, pois o operador $regex não reconhece o agrupamento e, portanto, não pode aproveitar esses índices.
Sintaxe do comando
Você pode criar um índice sem diferenciação de maiúsculas e minúsculas com db.collection.createIndex() especificando a opção collation:
db.collection.createIndex(    {       <field>: <sortOrder>    },    {       collation:          {             locale : <locale>,             strength : < 1 | 2 >          }    } ) 
Para especificar um agrupamento para um índice que não diferencia maiúsculas de minúsculas, inclua os seguintes campos no objeto collation:
| Campo | Descrição | 
|---|---|
| 
 | Especifica as regras do idioma. Para obter uma lista de locais disponíveis, consulte Idiomas e locais aceitos. | 
| 
 | Determina as regras de comparação. Um valor de  | 
Para campos de agrupamento adicionais, consulte Agrupamento.
Comportamento
Para usar um índice que especifica um agrupamento, as operações de consulta e classificação devem especificar o mesmo agrupamento que o índice. Se uma coleção tiver definido um agrupamento, todas as consultas e índices herdarão esse agrupamento, a menos que especifiquem explicitamente um agrupamento diferente.
Exemplos
Crie um índice que não diferencia maiúsculas de minúsculas
Para usar um índice que não diferencia maiúsculas de minúsculas em uma collection sem agrupamento padrão, crie um índice com agrupamento e defina o parâmetro strength como 1 ou 2 (consulte Agrupamento para obter uma descrição detalhada do parâmetro strength). Você deve especificar o mesmo agrupamento no nível da consulta para usar o agrupamento em nível de índice.
O exemplo abaixo cria uma collection sem agrupamento padrão e, em seguida, adiciona um índice no campo type com um agrupamento sem diferenciação de maiúsculas e minúsculas.
db.createCollection("fruit") db.fruit.createIndex(    { type: 1 },    { collation: { locale: 'en', strength: 2 } } ) 
Para usar o índice, as consultas devem especificar o mesmo agrupamento.
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 
Índices que não diferenciam maiúsculas de minúsculas em collections com um agrupamento padrão
Quando você cria uma coleção com um agrupamento padrão, todos os índices criados posteriormente herdam esse agrupamento, a menos que você especifique um agrupamento diferente. Todas as consultas que não especificam um agrupamento diferente também herdam o agrupamento padrão.
O exemplo a seguir cria uma coleção chamada names com um agrupamento padrão e, em seguida, cria um índice no campo first_name .
db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } ) db.names.createIndex( { first_name: 1 } ) // inherits the default collation 
Insira uma pequena coleção de nomes:
db.names.insertMany( [    { first_name: "Betsy" },    { first_name: "BETSY"},    { first_name: "betsy"} ] ) 
As consultas nessa coleção usam o agrupamento especificado por padrão e, se possível, também usam o índice.
db.names.find( { first_name: "betsy" } ) // inherits the default collation: { collation: { locale: 'en_US', strength: 2 } } // finds three results 
A operação acima usa o agrupamento padrão da coleção e localiza todos os três documentos. Ele usa o índice no campo first_name para melhor desempenho.
Ainda é possível realizar pesquisas com distinção entre maiúsculas e minúsculas nessa coleção, especificando um agrupamento diferente na consulta:
db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } ) // does not use the collection's default collation, finds one result 
A operação acima encontra apenas um documento, pois usa um agrupamento sem nenhum valor strength especificado. Ele não usa o agrupamento padrão da coleção nem o índice.