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.