Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Criar um índice em um documento incorporado

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Passos
  • Resultados
  • Saiba mais

Você pode criar índices em documentos incorporados como um todo. No entanto, somente as queries que especificam o documento incorporado inteiro usam o índice. Queries em um campo específico do documento não usam o índice.

  • Para utilizar um índice em um documento incorporado, sua query deve especificar todo o documento incorporado. Isso pode levar a comportamentos inesperados se o modelo de esquema for alterado e você adicionar ou remover campos do documento indexado.

  • Quando você faz query de documentos incorporados, a ordem em que você especifica os campos na query é importante. Os documentos incorporados em sua query e o documento retornado devem corresponder exatamente. Para ver exemplos de queries em documentos incorporados, consulte Query sobre documentos incorporados/aninhados.

  • Antes de criar um índice em um documento incorporado, considere se você deveria indexar campos específicos nesse documento ou usar um índice curinga para indexar todos os subcampos do documento.

Crie uma coleção students que contenha os seguintes documentos:

db.students.insertMany( [
{
"name": "Alice",
"gpa": 3.6,
"location": { city: "Sacramento", state: "California" }
},
{
"name": "Bob",
"gpa": 3.2,
"location": { city: "Albany", state: "New York" }
}
] )

Crie um índice no campo location:

db.students.createIndex( { location: 1 } )

A seguinte query utiliza o índice no campo location:

db.students.find( { location: { city: "Sacramento", state: "California" } } )

As querys a seguir não usam o índice no campo location porque fazem query em campos específicos no documento incorporado:

db.students.find( { "location.city": "Sacramento" } )
db.students.find( { "location.state": "New York" } )

Para que uma consulta em notação de ponto use um índice, você deve criar um índice no campo incorporado específico que está consultando, e não no objeto incorporado inteiro. Por exemplo, consulte Criar um índice em um campo incorporado.

A query a seguir não retorna resultados porque os campos incorporados no predicado de query são especificados em uma ordem diferente daquela em que aparecem no documento:

db.students.find( { location: { state: "California", city: "Sacramento" } } )
← Criar um índice em um campo único