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.