MongoDB - Consultas Cobertas
Neste capítulo, aprenderemos sobre as consultas cobertas.
O que é uma consulta coberta?
De acordo com a documentação oficial do MongoDB, uma consulta coberta é uma consulta na qual -
- Todos os campos da consulta fazem parte de um índice.
- Todos os campos retornados na consulta estão no mesmo índice.
Como todos os campos presentes na consulta fazem parte de um índice, o MongoDB corresponde às condições da consulta e retorna o resultado usando o mesmo índice, sem realmente olhar dentro dos documentos. Como os índices estão presentes na RAM, a busca de dados de índices é muito mais rápida em comparação com a busca de dados por digitalização de documentos.
Usando consultas cobertas
Para testar as consultas cobertas, considere o seguinte documento no users coleção -
{
"_id": ObjectId("53402597d852426020000003"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
Vamos primeiro criar um índice composto para o users coleção nos campos gender e user_name usando a seguinte consulta -
>db.users.createIndex({gender:1,user_name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Agora, este índice cobrirá a seguinte consulta -
>db.users.find({gender:"M"},{user_name:1,_id:0})
{ "user_name" : "tombenzamin" }
Isso quer dizer que para a consulta acima, o MongoDB não iria procurar nos documentos do banco de dados. Em vez disso, ele buscaria os dados necessários de dados indexados, o que é muito rápido.
Como nosso índice não inclui _id, nós o excluímos explicitamente do conjunto de resultados de nossa consulta, pois o MongoDB, por padrão, retorna o campo _id em cada consulta. Portanto, a seguinte consulta não teria sido coberta dentro do índice criado acima -
>db.users.find({gender:"M"},{user_name:1})
{ "_id" : ObjectId("53402597d852426020000003"), "user_name" : "tombenzamin" }
Por último, lembre-se de que um índice não pode cobrir uma consulta se -
- Qualquer um dos campos indexados é uma matriz
- Qualquer um dos campos indexados é um subdocumento