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 команда.