MongoDB har en administrationskommando kaldet dropIndexes
der dropper et eller flere indekser (undtagen indekset på _id
felt) fra den angivne samling.
Eksempler på indekser
Antag, at vi har en samling kaldet posts
med følgende indekser:
db.pets.getIndexes()
Resultat:
[ { "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 } ]
I dette tilfælde har vi fire indekser. Den første er standardindekset for _id
Mark. Dette indeks oprettes automatisk, når du opretter en samling, og det kan ikke slettes.
De andre tre indekser kan droppes.
Slip et enkelt indeks
For at slette et enkelt indeks skal du videregive samlingsnavnet samt indeksnavnet eller dets specifikationsdokument.
Eksempel:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
I dette tilfælde videregiver vi indeksnavnet.
Kørsel, der resulterer i følgende output:
{ "nIndexesWas" : 4, "ok" : 1 }
Dette fortæller os, at indekset blev droppet.
Alternativt kunne vi have brugt indeksspecifikationsdokumentet i stedet for dets navn, sådan her:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Slet flere indekser
Hvis du vil slette flere indekser (men ikke alle). indekser), videregive indeksnavnene i et array.
Eksempel:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Resultat:
{ "nIndexesWas" : 3, "ok" : 1 }
Lad os på dette stadium gentjekke vores liste over indekser:
db.posts.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Som forventet er tre indeks blevet slettet, og der er kun ét tilbage (og det kan ikke slettes).
Når du passerer et array, kan tekstindekser kun slettes ved at angive indeksnavnet. I sådanne tilfælde kan du ikke droppe tekstindekser ved at angive deres specifikationsdokument, ligesom du kan med andre indekser.
Slet alle indekser
Du kan slette alle indekser ved at bruge stjerne-jokertegnet (*
).
Til dette eksempel har jeg genskabt indekserne. Så indekserne ser således ud::
db.products.getIndexes()
Resultat:
[ { "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 } ]
Lad os nu droppe alle indekser på én gang:
db.runCommand( { dropIndexes: "posts", index: "*" })
Resultat:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Alle indekser blev slettet undtagen _id
indeks (det indeks kan ikke slettes).
Lad os tjekke indekserne igen.
db.products.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Som forventet, _id
indeks er det eneste, der er tilbage.
MongoDB-dokumentation
Se MongoDB-dokumentationen for mere information om dropIndexes
kommando.