MongoDB има административна команда, наречена dropIndexes
който премахва един или повече индекси (с изключение на индекса на _id
поле) от посочената колекция.
Примерни индекси
Да предположим, че имаме колекция, наречена posts
със следните индекси:
db.pets.getIndexes()
Резултат:
[ { "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 } ]
В този случай имаме четири индекса. Първият е индексът по подразбиране за _id
поле. Този индекс се създава автоматично, когато създавате колекция, и не може да бъде изхвърлен.
Останалите три индекса могат да бъдат премахнати.
Пуснете единичен индекс
За да премахнете един индекс, предайте името на колекцията, както и името на индекса или неговия спецификационен документ.
Пример:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
В този случай предаваме името на индекса.
Изпълнението на това води до следния изход:
{ "nIndexesWas" : 4, "ok" : 1 }
Това ни казва, че индексът е отпаднал.
Като алтернатива бихме могли да използваме документа със спецификация на индекса вместо неговото име, както следва:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Изпускане на множество индекси
Ако искате да премахнете множество индекси (но не всички индекси), предайте имената на индекси в масив.
Пример:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Резултат:
{ "nIndexesWas" : 3, "ok" : 1 }
На този етап нека да проверим отново нашия списък с индекси:
db.posts.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Както се очакваше, три индекса бяха изтрити и остана само един (и той не може да бъде изтрит).
Когато се предава масив, текстовите индекси могат да бъдат премахнати само чрез посочване на името на индекса. В такива случаи не можете да пуснете текстови индекси, като посочите техния документ за спецификация, както можете с други индекси.
Изхвърлете всички индекси
Можете да премахнете всички индекси, като използвате заместващия знак на звездичка (*
).
За този пример създадох отново индексите. Индексите изглеждат така::
db.products.getIndexes()
Резултат:
[ { "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 } ]
Сега нека пуснем всички индекси наведнъж:
db.runCommand( { dropIndexes: "posts", index: "*" })
Резултат:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Всички индекси бяха премахнати с изключение на _id
индекс (този индекс не може да бъде отхвърлен).
Нека отново проверим индексите.
db.products.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Както се очакваше, _id
индексът е единственият, който остава.
Документация на MongoDB
Вижте документацията на MongoDB за повече информация относно dropIndexes
команда.