English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Consulta de Cobertura MongoDB

Neste capítulo, vamos aprender sobre consultas cobertas.

O que é uma consulta coberta?

De acordo com o documento oficial do MongoDB, as consultas cobertas são do tipo que-

  • Todos os campos na consulta são parte do índice.

  • Todos os campos retornados na consulta estão no mesmo índice.

Como todos os campos existentes na consulta são parte do índice, o MongoDB coincidirá com as condições da consulta e usará o mesmo índice para retornar os resultados, sem necessidade de verificar o conteúdo do documento internamente. Como o índice está na RAM, a obtenção de dados a partir do índice é muito mais rápida do que obter dados através da varredura dos documentos.

Usando consultas cobertas

Para testar as consultas cobertas, consultesersOs seguintes documentos na coleção-

{
   "_id": ObjectId("53402597d852426020000003",
   "contact": ""987654321",
   "dob": "0"1-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

Primeiro, usaremos a seguinte consulta para criar um índice composto nos campos gender e user_name da coleção users–

>db.users.createIndex({gender:1,user_name:1}
{
	"createdCollectionAutomatically": false,
	"numIndexesBefore": 1,
	"numIndexesAfter": 2,
	"ok": 1
}

Agora, o índice cobrirá as seguintes consultas-

>db.users.find({gender:"M"},{user_name:1,_id:0)
{"user_name": "tombenzamin"}

Isso é, para a consulta acima, o MongoDB não verificará os documentos do banco de dados. Em vez disso, ele obterá os dados necessários dos dados do índice, o que é muito rápido.

Devido ao fato de que o índice não incluir_idO campo, então o excluímos explicitamente do resultado da consulta, porque o MongoDB retorna o campo _id por padrão em cada consulta. Portanto, a consulta a seguir não estará incluída nos índices criados -

>db.users.find({gender:"M"},{user_name:1}
{"_id": ObjectId("53402597d852426020000003"), "user_name": "tombenzamin"}

Por fim, lembre-se de que, se, o índice não cobre a consulta

  • Qualquer campo de índice é um array

  • Qualquer campo de índice é um subdocumento