Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Índices que não diferenciam maiúsculas de minúsculas

Nesta página

  • Sintaxe do comando
  • Comportamento
  • Exemplos
  • Crie um índice que não diferencia maiúsculas de minúsculas
  • Índices que não diferenciam maiúsculas de minúsculas em collections com um agrupamento padrão

Índices que não diferenciam maiúsculas de minúsculas aceitam queries que realizam comparações de strings sem considerar maiúsculas e minúsculas. A insensibilidade a maiúsculas e minúsculas é derivada do agrupamento.

Importante

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
locale
Especifica as regras do idioma. Para obter uma lista de locais disponíveis, consulte Idiomas e locais aceitos.
strength
Determina as regras de comparação. Um valor de strength de 1 ou 2 indica um agrupamento sem diferenciação de maiúsculas e minúsculas.

Para campos de agrupamento adicionais, consulte Agrupamento.

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.

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

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.

← Propriedades do índice