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

Consultas de cobertura MongoDB

En este capítulo, aprenderemos sobre las consultas cubiertas.

¿Qué es una consulta cubierta?

De acuerdo con el documento oficial de MongoDB, las consultas cubiertas son de este tipo, donde-

  • Todos los campos en la consulta son parte del índice.

  • Todos los campos devueltos en la consulta están en el mismo índice.

Dado que todos los campos existentes en la consulta son parte del índice, MongoDB coincidirá con las condiciones de la consulta y devolverá los resultados utilizando el mismo índice, sin necesidad de ver el contenido interno del documento. Ya que el índice reside en RAM, es mucho más rápido obtener datos del índice en comparación con obtener datos escaneando los documentos.

Usando consultas cubiertas

sersLos siguientes documentos en la colección-

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

Primero utilizaremos la siguiente consulta para crear un índice compuesto en los campos gender y user_name de la colección users–

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

Ahora, el índice cubrirá las siguientes consultas-

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

Es decir, para la consulta anterior, MongoDB no verá los documentos de la base de datos. En su lugar, obtendrá los datos necesarios de los datos del índice, lo cual es muy rápido.

Dado que el índice no contiene_idEl campo, por lo tanto, lo hemos excluido explícitamente de los resultados de la consulta, ya que MongoDB devuelve el campo _id por defecto en cada consulta. Por lo tanto, la siguiente consulta no incluirá lo siguiente en el índice creado--

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

Por último, recuerde que, si, los índices no pueden cubrir la consulta

  • Cualquier campo de índice es un array

  • Cualquier campo de índice es un subdocumento