MongoDB har ett administrationskommando som heter dropIndexes
som tappar ett eller flera index (förutom indexet på _id
). fält) från den angivna samlingen.
Exempelindex
Anta att vi har en samling som heter posts
med följande index:
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 det här fallet har vi fyra index. Den första är standardindexet för _id
fält. Det här indexet skapas automatiskt när du skapar en samling och det kan inte tas bort.
De andra tre indexen kan tas bort.
Släpp ett enda index
Om du vill släppa ett enstaka index skickar du samlingens namn, liksom indexnamnet eller dess specifikationsdokument.
Exempel:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
I det här fallet skickar vi indexnamnet.
Körning som resulterar i följande utdata:
{ "nIndexesWas" : 4, "ok" : 1 }
Detta talar om för oss att indexet togs bort.
Alternativt kunde vi ha använt indexspecifikationsdokumentet istället för dess namn, så här:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Släpp flera index
Om du vill ta bort flera index (men inte alla index), skicka indexnamnen i en array.
Exempel:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Resultat:
{ "nIndexesWas" : 3, "ok" : 1 }
I det här skedet, låt oss kontrollera vår lista med index igen:
db.posts.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Som väntat har tre index tagits bort och det finns bara ett kvar (och det kan inte tas bort).
När du skickar en array kan textindex bara tas bort genom att ange indexnamnet. I sådana fall kan du inte släppa textindex genom att ange deras specifikationsdokument, som du kan med andra index.
Släpp alla index
Du kan släppa alla index genom att använda asterisken jokertecken (*
).
För det här exemplet har jag återskapat indexen. Så här ser indexen ut::
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 } ]
Låt oss nu släppa alla index på en gång:
db.runCommand( { dropIndexes: "posts", index: "*" })
Resultat:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Alla index har tagits bort förutom _id
index (det indexet kan inte tas bort).
Låt oss kontrollera indexen igen.
db.products.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Som förväntat, _id
index är det enda som finns kvar.
MongoDB-dokumentation
Se MongoDB-dokumentationen för mer information om dropIndexes
kommando.