MongoDB má administrační příkaz s názvem dropIndexes
který zahodí jeden nebo více indexů (kromě indexu na _id
pole) ze zadané kolekce.
Příklady indexů
Předpokládejme, že máme kolekci nazvanou posts
s následujícími indexy:
db.pets.getIndexes()
Výsledek:
[ { "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 } ]
V tomto případě máme čtyři indexy. První je výchozí index pro _id
pole. Tento index se vytvoří automaticky při vytváření kolekce a nelze jej zrušit.
Ostatní tři indexy mohou být zrušeny.
Vypustit jeden index
Chcete-li zrušit jeden index, předejte název kolekce a také název indexu nebo dokument s jeho specifikací.
Příklad:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
V tomto případě předáváme název indexu.
Výsledkem spuštění je následující výstup:
{ "nIndexesWas" : 4, "ok" : 1 }
To nám říká, že index byl zrušen.
Alternativně jsme mohli použít dokument specifikace indexu místo jeho názvu, takto:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Vypustit více indexů
Pokud chcete zrušit více indexů (ale ne všechny indexy), předejte názvy indexů v poli.
Příklad:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Výsledek:
{ "nIndexesWas" : 3, "ok" : 1 }
V této fázi znovu zkontrolujte náš seznam indexů:
db.posts.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Podle očekávání byly smazány tři indexy a zbyl pouze jeden (a nelze jej smazat).
Při předávání pole lze textové indexy zrušit pouze zadáním názvu indexu. V takových případech nemůžete vypustit textové indexy zadáním jejich dokumentu specifikace, jako můžete u jiných indexů.
Zrušit všechny indexy
Všechny indexy můžete zrušit pomocí zástupného znaku hvězdičky (*
).
Pro tento příklad jsem znovu vytvořil indexy. Takže indexy vypadají takto::
db.products.getIndexes()
Výsledek:
[ { "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 } ]
Nyní zahodíme všechny indexy najednou:
db.runCommand( { dropIndexes: "posts", index: "*" })
Výsledek:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Všechny indexy byly zrušeny kromě _id
index (tento index nelze vypustit).
Pojďme znovu zkontrolovat indexy.
db.products.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Jak se očekávalo, _id
index je jediný, který zůstává.
Dokumentace MongoDB
Další informace o dropIndexes
naleznete v dokumentaci MongoDB příkaz.