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

Índices avanzados MongoDB

Hemos insertado los siguientes documentos en la colección denominada users, como se muestra a continuación –

db.users.insert(
	{
		"address": {
			"city": "Los Angeles",
			"state": "California",
			"pincode": ""123"
		}
		"tags": [
			"music",
			"cricket",
			"blogs"
		],
		"name": "Tom Benzamin"
	}
)

El documento superior contiene un subdocumento de dirección y un array de etiquetas.

Índice de campo de array

Supongamos que queremos buscar documentos de usuarios basados en las etiquetas. Para esto, crearemos un índice en el array tags de la colección.

Crear índices en arrays, crear índices individuales para cada campo del array. Por lo tanto, en nuestro ejemplo, cuando creamos un índice en el array tags, se creará un índice individual para los valores music, cricket y blogs.

Para crear un índice en el array de etiquetas tags, utilice el siguiente código-

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

Después de crear el índice, podemos buscar en el campo tags de la colección, como se muestra a continuación-

>db.users.find({tags:"cricket"}).pretty(){}
	"_id" : ObjectId("5dd7c927f1dd4583e7103fdf"),
	"address" : {
		"city" : "Los Angeles",
		"state" : "California",
		"pincode" : ""123"
	}
	"tags" : [
		"music",
		"cricket",
		"blogs"
	],
	"name" : "Tom Benzamin"
}
>

Para verificar si se ha utilizado el índice correcto, utilice el comando explain siguiente-

>db.users.find({tags:"cricket"}).explain()

Este le brinda los siguientes resultados-

{
	"queryPlanner": {
		"plannerVersion": 1,
		"namespace": "mydb.users",
		"indexFilterSet": false,
		"parsedQuery": {}}
			"tags": {
				
			}
		}
		"queryHash": "",9D3B61A7",
		"planCacheKey": "049997B",
		
			"stage": "FETCH",
			
				"stage": "IXSCAN",
				"keyPattern": {
					"tags": 1
				}
				1",
				"isMultiKey": false,
				
					
				}
				
				
				"isPartial": false,
				 2,
				"direction": "forward",
				"indexBounds": {
					"tags" : [
						"[\"cricket\", \"cricket\"]"
					
				}
			}
		}
		"rejectedPlans": [],
	}
	"serverInfo": {
		"host": "Krishna",
		"port": 27017,
		"version": ""4.2.1",
		"gitVersion": "edf6d45851c0b9ee15548f0f847df141764a317e
	}
	"ok": 1
}
>

El comando anterior generó "cursor": "BtreeCursor tags_1"

Índice de campo de subdocumento

Supongamos que queremos buscar documentos basándonos en los campos city, state y pincode. Dado que todos estos campos son parte del subdocumento de dirección, crearemos un índice en todos los campos del subdocumento.

Para crear un índice en todos los tres campos del subdocumento, utilice el siguiente código-

>db.users.createIndex({"address.city":1,"address.state":1,"address.pincode":1}
{
	"numIndexesBefore": 4,
	"numIndexesAfter": 4,
	"note": "todos los índices ya existen",
	"ok": 1
}
>

Después de crear el índice, podemos usar este índice para buscar cualquier campo de subdocumento, como se muestra a continuación:

>db.users.find({"address.city":"Los Angeles"}).pretty(){
	"_id" : ObjectId("5dd7c927f1dd4583e7103fdf"),
	"address" : {
		"city" : "Los Angeles",
		"state" : "California",
		"pincode" : ""123"
	}
	"tags" : [
		"music",
		"cricket",
		"blogs"
	],
	"name" : "Tom Benzamin"
}

Recuerde, la expresión de la consulta debe seguir el orden de los índices especificados. Por lo tanto, los índices creados anteriormente apoyarán las siguientes consultas-

>db.users.find({"address.city":"Los Angeles","address.state":"California"}).pretty(){
	"_id" : ObjectId("5dd7c927f1dd4583e7103fdf"),
	"address" : {
		"city" : "Los Angeles",
		"state" : "California",
		"pincode" : ""123"
	}
	"tags" : [
		"music",
		"cricket",
		"blogs"
	],
	"name" : "Tom Benzamin"
}
>