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.