sql >> Base de Datos >  >> NoSQL >> MongoDB

Comando dropIndexes de MongoDB

MongoDB tiene un comando de administración llamado dropIndexes que descarta uno o más índices (excepto el índice en el _id field) de la colección especificada.

Índices de ejemplo

Supongamos que tenemos una colección llamada posts con los siguientes índices:

db.pets.getIndexes()

Resultado:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1
		},
		"name" : "title_1"
	},
	{
		"v" : 2,
		"key" : {
			"tags" : 1
		},
		"name" : "tags_1"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text",
		"weights" : {
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

En este caso tenemos cuatro índices. El primero es el índice predeterminado para el _id campo. Este índice se crea automáticamente cuando crea una colección y no se puede eliminar.

Los otros tres índices se pueden eliminar.

Soltar un solo índice

Para eliminar un solo índice, pase el nombre de la colección, así como el nombre del índice o su documento de especificación.

Ejemplo:

db.runCommand( { dropIndexes: "posts", index: "title_1" })

En este caso, estamos pasando el nombre del índice.

Ejecutar eso da como resultado el siguiente resultado:

{ "nIndexesWas" : 4, "ok" : 1 } 

Esto nos dice que el índice se eliminó.

Alternativamente, podríamos haber usado el documento de especificación del índice en lugar de su nombre, así:

db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })

Soltar varios índices

Si desea eliminar varios índices (pero no todos índices), pase los nombres de los índices en una matriz.

Ejemplo:

db.runCommand( { 
  dropIndexes: "posts", 
  index: [ "tags_1", "body_text" ] 
})

Resultado:

{ "nIndexesWas" : 3, "ok" : 1 }

En esta etapa, volvamos a revisar nuestra lista de índices:

db.posts.getIndexes()

Resultado:

[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ] 

Como era de esperar, se han eliminado tres índices y solo queda uno (y no se puede eliminar).

Al pasar una matriz, los índices de texto solo se pueden eliminar especificando el nombre del índice. En tales casos, no puede descartar índices de texto especificando su documento de especificación, como puede hacerlo con otros índices.

Eliminar todos los índices

Puede eliminar todos los índices utilizando el comodín asterisco (* ).

Para este ejemplo, he vuelto a crear los índices. Entonces los índices se ven así::

db.products.getIndexes()

Resultado:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1
		},
		"name" : "title_1"
	},
	{
		"v" : 2,
		"key" : {
			"tags" : 1
		},
		"name" : "tags_1"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text",
		"weights" : {
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Ahora eliminemos todos los índices a la vez:

db.runCommand( { dropIndexes: "posts", index: "*" })

Resultado:

{
	"nIndexesWas" : 4,
	"msg" : "non-_id indexes dropped for collection",
	"ok" : 1
}

Se eliminaron todos los índices excepto el _id índice (ese índice no se puede descartar).

Revisemos los índices nuevamente.

db.products.getIndexes()

Resultado:

[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

Como era de esperar, el _id index es el único que queda.

Documentación de MongoDB

Consulte la documentación de MongoDB para obtener más información sobre dropIndexes comando.