MongoDB ha un comando di amministrazione chiamato dropIndexes
che elimina uno o più indici (tranne l'indice su _id
campo) dalla raccolta specificata.
Indici di esempio
Supponiamo di avere una raccolta chiamata posts
con i seguenti indici:
db.pets.getIndexes()
Risultato:
[ { "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 } ]
In questo caso abbiamo quattro indici. Il primo è l'indice predefinito per _id
campo. Questo indice viene creato automaticamente quando crei una raccolta e non può essere eliminato.
Gli altri tre indici possono essere eliminati.
Rilascia un singolo indice
Per eliminare un singolo indice, passa il nome della raccolta, nonché il nome dell'indice o il relativo documento delle specifiche.
Esempio:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
In questo caso, stiamo passando il nome dell'indice.
L'esecuzione che comporta il seguente output:
{ "nIndexesWas" : 4, "ok" : 1 }
Questo ci dice che l'indice è stato eliminato.
In alternativa, avremmo potuto utilizzare il documento di specifica dell'indice invece del suo nome, in questo modo:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Rilascia più indici
Se desideri eliminare più indici (ma non tutti indici), passa i nomi degli indici in un array.
Esempio:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Risultato:
{ "nIndexesWas" : 3, "ok" : 1 }
A questo punto, controlliamo nuovamente il nostro elenco di indici:
db.posts.getIndexes()
Risultato:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Come previsto, sono stati eliminati tre indici e ne è rimasto solo uno (e non può essere eliminato).
Quando si passa una matrice, gli indici di testo possono essere eliminati solo specificando il nome dell'indice. In questi casi, non puoi eliminare gli indici di testo specificando il loro documento di specifica, come puoi fare con altri indici.
Elimina tutti gli indici
Puoi eliminare tutti gli indici utilizzando il carattere jolly asterisco (*
).
Per questo esempio, ho ricreato gli indici. Quindi gli indici si presentano così::
db.products.getIndexes()
Risultato:
[ { "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 } ]
Ora eliminiamo tutti gli indici contemporaneamente:
db.runCommand( { dropIndexes: "posts", index: "*" })
Risultato:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Tutti gli indici sono stati eliminati ad eccezione di _id
index (questo indice non può essere eliminato).
Controlliamo di nuovo gli indici.
db.products.getIndexes()
Risultato:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Come previsto, il _id
index è l'unico che rimane.
Documentazione MongoDB
Consulta la documentazione di MongoDB per ulteriori informazioni su dropIndexes
comando.