В MongoDB, dropIndexes()
методът ви позволява да премахнете един или повече индекси от колекция.
За да премахнете единичен индекс, предайте името на индекса или документа за неговата дефиниция/спецификация. Ако е текстов индекс, можете да посочите само името на индекса.
За да премахнете множество индекси, предайте имената на индекси в масив.
За да премахнете всички индекси (с изключение на _id
индекс), не предавайте никакви аргументи.
Примерни индекси
Да предположим, че имаме колекция, наречена pets
. Можем да използваме getIndexes()
за да видите какви индекси има:
db.pets.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" }, { "v" : 2, "key" : { "name" : 1 }, "name" : "name_1", "hidden" : true }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "weight_-1" } ]
В този случай имаме четири индекса. Първият е индексът по подразбиране за _id
поле. Този индекс се създава автоматично, когато създавате колекция, и не може да бъде изхвърлен.
Останалите три индекса могат бъде отхвърлен.
Пуснете единичен индекс
За да пуснете един индекс, предайте името на индекса или неговия спецификационен документ.
Пример:
db.pets.dropIndexes("weight_-1")
В този случай предаваме името на индекса.
Изпълнението на това води до следния изход:
{ "nIndexesWas" : 4, "ok" : 1 }
Това ни казва, че индексът е отпаднал.
Като алтернатива бихме могли да изпуснем индекса, като предадем неговия документ за спецификация:
db.pets.dropIndexes( { "weight" : -1 } )
Изпускане на множество индекси
Ако искате да премахнете множество индекси, но не всички индекси, предайте имената на индексите в масив.
Пример:
db.pets.dropIndexes( [ "type_1", "name_1" ])
Резултат:
{ "nIndexesWas" : 3, "ok" : 1 }
На този етап нека да проверим отново нашия списък с индекси:
db.pets.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Както се очакваше, три индекса бяха изтрити и остана само един (и не може да бъде изтрит).
Изхвърлете всички индекси
Можете да премахнете всички индекси, като извикате dropIndexes()
метод без никакви аргументи.
За този пример нека пуснем индексите в колекция, наречена products
. Тази колекция има четири индекса, както следва:
db.products.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "product.$**" : 1 }, "name" : "product.$**_1" }, { "v" : 2, "key" : { "sizes" : 1 }, "name" : "sizes_1" }, { "v" : 2, "key" : { "stock" : -1 }, "name" : "stock_-1" } ]
Сега нека пуснем всички индекси:
db.products.dropIndexes()
Резултат:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Както се споменава в съобщението, всички индекси бяха премахнати с изключение на _id
индекс. Този индекс не може да бъде отхвърлен.
Нека отново проверим индексите.
db.products.getIndexes()
Резултат:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Както се очакваше, _id
index е единственият останал.
dropIndexes()
методът е обвивка около dropIndexes
команда.
Документация на MongoDB
Вижте документацията на MongoDB за повече информация относно dropIndexes()
метод.