MongoDB ma polecenie administracyjne o nazwie dropIndexes
który upuszcza jeden lub więcej indeksów (z wyjątkiem indeksu w _id
pole) z określonej kolekcji.
Przykładowe indeksy
Załóżmy, że mamy kolekcję o nazwie posts
z następującymi indeksami:
db.pets.getIndexes()
Wynik:
[ { "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 } ]
W tym przypadku mamy cztery indeksy. Pierwszy to domyślny indeks dla _id
pole. Ten indeks jest tworzony automatycznie podczas tworzenia kolekcji i nie można go usunąć.
Pozostałe trzy indeksy można usunąć.
Upuść pojedynczy indeks
Aby usunąć pojedynczy indeks, przekaż nazwę kolekcji, a także nazwę indeksu lub dokument specyfikacji.
Przykład:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
W tym przypadku przekazujemy nazwę indeksu.
Uruchomienie tego skutkuje następującymi danymi wyjściowymi:
{ "nIndexesWas" : 4, "ok" : 1 }
To mówi nam, że indeks został usunięty.
Alternatywnie moglibyśmy użyć dokumentu specyfikacji indeksu zamiast jego nazwy, w ten sposób:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Upuść wiele indeksów
Jeśli chcesz usunąć wiele indeksów (ale nie wszystkie .) indeksy), przekaż nazwy indeksów w tablicy.
Przykład:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Wynik:
{ "nIndexesWas" : 3, "ok" : 1 }
Na tym etapie sprawdźmy ponownie naszą listę indeksów:
db.posts.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Zgodnie z oczekiwaniami, trzy indeksy zostały usunięte, a pozostał tylko jeden (i nie można go usunąć).
Podczas przekazywania tablicy indeksy tekstowe można usunąć tylko przez określenie nazwy indeksu. W takich przypadkach nie można usunąć indeksów tekstowych, określając ich dokument specyfikacji, tak jak w przypadku innych indeksów.
Upuść wszystkie indeksy
Możesz usunąć wszystkie indeksy za pomocą symbolu wieloznacznego gwiazdki (*
).
W tym przykładzie odtworzyłem indeksy. Indeksy wyglądają więc tak:
db.products.getIndexes()
Wynik:
[ { "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 } ]
Teraz odrzućmy wszystkie indeksy na raz:
db.runCommand( { dropIndexes: "posts", index: "*" })
Wynik:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Wszystkie indeksy zostały usunięte z wyjątkiem _id
indeks (ten indeks nie może zostać usunięty).
Sprawdźmy jeszcze raz indeksy.
db.products.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Zgodnie z oczekiwaniami _id
indeks jest jedynym, który pozostaje.
Dokumentacja MongoDB
Zobacz dokumentację MongoDB, aby uzyskać więcej informacji na temat dropIndexes
polecenie.