Índices curinga
O MongoDB oferece suporte à criação de índices em um campo, ou conjunto de campos, para melhorar o desempenho das consultas. O MongoDB oferece suporte a esquemas flexíveis, o que significa que os nomes dos campos de documentos podem ser diferentes em uma coleção. Use índices curinga para dar suporte a consultas em campos arbitrários ou desconhecidos.
Para criar um índice curinga, utilize o especificador curinga ($**
) como a chave de índice:
db.collection.createIndex( { "$**": <sortOrder> } )
É possível utilizar os seguintes comandos para criar um índice curinga:
Casos de uso
Utilize índices curinga somente quando os campos que você deseja indexar forem desconhecidos ou possam mudar. Os índices curinga não funcionam tão bem quanto os índices direcionados em campos específicos. Se sua collection contiver nomes de campos arbitrários que impeçam índices direcionados, considere remodelar seu esquema para ter nomes de campos consistentes. Para saber mais sobre índices direcionados, consulte Crie índices para oferecer suporte a queries.
Considere utilizar um índice curinga nas seguintes situações:
Se seu aplicativo realizar a consulta de uma coleção na qual os nomes dos campos variam entre os documentos, crie um índice curinga para dar suporte a queries em todos os nomes de campos de documentos possíveis.
Se seu aplicativo realizar consultas repetidamente de um campo de documento incorporado onde os subcampos não são consistentes, crie um índice curinga para oferecer suporte a consultas em todos os subcampos.
Se seu aplicativo realizar consultas de documentos que compartilham características comuns. Um índice curinga composto pode cobrir com eficiência muitas consultas para documentos que têm campos comuns. Para saber mais, consulte Índices curinga compostos.
Começar
É possível executar as seguintes tarefas com índices curinga:
Detalhes
Os índices curinga se comportam da seguinte maneira:
É possível criar múltiplos índices curinga em uma coleção.
Um índice curinga pode cobrir os mesmos campos que outros índices na collection.
Os índices curinga omitem o campo
_id
por padrão. Para incluir o campo_id
no índice curinga, você deve explicitamente incluí-lo no documentowildcardProjection
especificando{ "_id" : 1 }
.Os índices curinga são índices esparsos e contêm apenas entradas para documentos que têm o campo indexado, mesmo que o campo de índice contenha um valor nulo.
Os índices curinga são distintos e incompatíveis com os índices de texto curinga. Os índices curinga não suportam consultas usando o operador
$text
.
Queries cobertas
Os índices curinga poderão suportar uma consulta coberta somente se todas as condições a seguir forem verdadeiras:
O planejador de consulta seleciona o índice curinga para atender ao predicado da consulta.
O predicado de consulta especifica exatamente um campo coberto pelo índice curinga.
A projeção de consulta exclui explicitamente o
_id
e inclui somente o campo de consulta.O campo de consulta especificado nunca é uma matriz.
Considere o seguinte índice curinga na collection employees
:
db.employees.createIndex( { "$**" : 1 } )
A seguinte operação faz uma consulta para um campo único lastName
e projeta todos os outros campos a partir do documento resultante:
db.employees.find( { "lastName" : "Doe" }, { "_id" : 0, "lastName" : 1 } )
Se o lastName
especificado nunca for uma matriz, o MongoDB poderá usar o índice curinga $**
para dar suporte a uma consulta coberta.
Saiba mais
Para saber mais sobre índices curinga, consulte: