Índices de campo único
Nesta página
O MongoDB fornece suporte completo para índices em qualquer campo em umacoleção de documentos . Por padrão, todas as collections têm um índice no campo_id , e os aplicativos e usuários podem adicionar índices adicionais para dar suporte a queries e operações importantes.
Este documento descreve índices crescentes/descendentes em um único campo.
Compatibilidade
Você pode utilizar índices de campo único para sistemas hospedados no MongoDB Atlas.
Para saber mais sobre como gerenciar índices para distribuições hospedadas no MongoDB Atlas, consulte Criar, visualizar, descartar e ocultar índices.
Criar um índice ascendente em um único campo
Considere uma collection schools
que contenha o seguinte documento de amostra:
db.schools.insertOne( { "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } } )
A seguinte operação cria um índice ascendente no campo studentsEnrolled
da collection schools
:
db.schools.createIndex( { studentsEnrolled: 1 } )
O índice criado suporta query que selecionam no campo studentsEnrolled
, como o seguinte:
db.schools.find( { studentsEnrolled: 1034 } ) db.schools.find( { studentsEnrolled: { $gt: 500 } } )
Criar um Índice em um Campo Incorporado
Você pode criar índices em campos dentro de documentos incorporados, da mesma forma que pode indexar campos de nível superior em documentos. Os índices em campos incorporados são diferentes dos índices em documentos incorporados, que incluem o conteúdo completo até o tamanho máximo do índice do documento incorporado no índice. Em vez disso, índices em campos incorporados permitem que você use uma "notação de ponto" para introspecção em documentos incorporados.
Considere uma coleta chamada records
que contenha documentos que se assemelham ao seguinte documento de amostra:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } }
A seguinte operação cria um índice no campo location.state
:
db.schools.createIndex( { "location.state": 1 } )
O índice criado suportará queries que selecionam no campo location.state
, como o seguinte:
db.schools.find( { "location.state": "CA" } ) db.schools.find( { "location.city": "Albany", "location.state": "NY" } )
Criar um índice sobre documento incorporado
Você também pode criar índices no documento incorporado como um todo.
Ao criar um índice em um documento incorporado, somente as consultas que especificam todo o documento incorporado utilizam o índice. Consultas em um campo específico do documento não usam o índice.
Considere uma coleta chamada schools
que contenha documentos que se assemelham ao seguinte documento de amostra:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "studentsEnrolled": 1034, "location": { state: "NY", city: "New York" } }
O campo location
é um documento incorporado, contendo os campos incorporados city
e state
. O seguinte comando cria um índice no campo location
como um todo:
db.schools.createIndex( { location: 1 } )
A seguinte query pode utilizar o índice no campo location
:
db.schools.find( { location: { city: "New York", state: "NY" } } )
Observação
Embora a query possa usar o índice, o conjunto de resultados não inclui o documento de amostra acima. Ao realizar correspondências de igualdade em documentos incorporados, a ordem dos campos é importante e os documentos incorporados devem corresponder exatamente. Consulte Fazer query de documentos incorporados para obter mais informações sobre como consultar documentos incorporados.
Considerações adicionais
Durante a criação de índices, os aplicativos podem encontrar desempenho reduzido ou acesso limitado de leitura/gravação à coleção que está sendo indexada.
Para obter mais informações sobre o processo de construção de índices, consulte Construções de índices em collection preenchidas, especialmente a seção Construções de índices em ambientes replicados .
Alguns drivers usam NumberLong(1)
em vez de 1
para especificar a ordem do índice. Os índices resultantes são os mesmos.