MongoDB a une commande d'administration appelée dropIndexes
qui supprime un ou plusieurs index (sauf l'index sur le _id
champ) de la collection spécifiée.
Exemples d'index
Supposons que nous ayons une collection appelée posts
avec les index suivants :
db.pets.getIndexes()
Résultat :
[ { "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 } ]
Dans ce cas, nous avons quatre index. Le premier est l'index par défaut pour le _id
domaine. Cet index est créé automatiquement lorsque vous créez une collection, et il ne peut pas être supprimé.
Les trois autres index peuvent être supprimés.
Supprimer un index unique
Pour supprimer un seul index, transmettez le nom de la collection, ainsi que le nom de l'index ou son document de spécification.
Exemple :
db.runCommand( { dropIndexes: "posts", index: "title_1" })
Dans ce cas, nous transmettons le nom de l'index.
Exécution qui donne le résultat suivant :
{ "nIndexesWas" : 4, "ok" : 1 }
Cela nous indique que l'index a été supprimé.
Alternativement, nous aurions pu utiliser le document de spécification d'index au lieu de son nom, comme ceci :
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Supprimer plusieurs index
Si vous souhaitez supprimer plusieurs index (mais pas tous indexes), passez les noms d'index dans un tableau.
Exemple :
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Résultat :
{ "nIndexesWas" : 3, "ok" : 1 }
A ce stade, revérifions notre liste d'index :
db.posts.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Comme prévu, trois index ont été supprimés et il n'en reste plus qu'un (et il ne peut pas être supprimé).
Lors du passage d'un tableau, les index de texte ne peuvent être supprimés qu'en spécifiant le nom de l'index. Dans de tels cas, vous ne pouvez pas supprimer les index de texte en spécifiant leur document de spécification, comme vous le pouvez avec d'autres index.
Supprimer tous les index
Vous pouvez supprimer tous les index en utilisant le caractère générique astérisque (*
).
Pour cet exemple, j'ai recréé les index. Ainsi, les index ressemblent à ceci : :
db.products.getIndexes()
Résultat :
[ { "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 } ]
Supprimons maintenant tous les index d'un coup :
db.runCommand( { dropIndexes: "posts", index: "*" })
Résultat :
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Tous les index ont été supprimés à l'exception de _id
index (cet index ne peut pas être supprimé).
Vérifions à nouveau les index.
db.products.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Comme prévu, le _id
index est le seul qui reste.
Documentation MongoDB
Voir la documentation MongoDB pour plus d'informations sur les dropIndexes
commande.