В 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() метод.