MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Comando dropIndexes do MongoDB


MongoDB tem um comando de administração chamado dropIndexes que descarta um ou mais índices (exceto o índice no _id campo) da coleção especificada.

Exemplos de índices


Suponha que tenhamos uma coleção chamada posts com os seguintes í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
	}
]

Neste caso, temos quatro índices. O primeiro é o índice padrão para o _id campo. Esse índice é criado automaticamente quando você cria uma coleção e não pode ser descartado.

Os outros três índices podem ser descartados.

Solte um único índice


Para eliminar um único índice, passe o nome da coleção, bem como o nome do índice ou seu documento de especificação.

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

Nesse caso, estamos passando o nome do índice.

A execução disso resulta na seguinte saída:
{ "nIndexesWas" : 4, "ok" : 1 } 

Isso nos diz que o índice foi descartado.

Alternativamente, poderíamos ter usado o documento de especificação de índice em vez de seu nome, assim:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })

Eliminar vários índices


Se você quiser remover vários índices (mas não todos índices), passe os nomes dos índices em uma matriz.

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

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

Nesta fase, vamos verificar novamente nossa lista de índices:
db.posts.getIndexes()

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

Como esperado, três índices foram excluídos e resta apenas um (e não pode ser excluído).

Ao passar uma matriz, os índices de texto só podem ser eliminados especificando o nome do índice. Nesses casos, você não pode descartar índices de texto especificando seu documento de especificação, como faz com outros índices.

Retirar todos os índices


Você pode eliminar todos os índices usando o curinga asterisco (* ).

Para este exemplo, recriei os índices. Então os índices ficam assim::
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
	}
]

Agora vamos eliminar todos os índices de uma vez:
db.runCommand( { dropIndexes: "posts", index: "*" })

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

Todos os índices foram descartados, exceto o _id index (esse índice não pode ser descartado).

Vamos verificar os índices novamente.
db.products.getIndexes()

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

Como esperado, o _id índice é o único que permanece.

Documentação do MongoDB


Consulte a documentação do MongoDB para obter mais informações sobre os dropIndexes comando.