Jeśli masz ukryty indeks w MongoDB, możesz użyć unhideIndex()
metoda lub collMod
polecenie administracyjne, aby go odkryć.
Przykładowe indeksy
Rzućmy okiem na indeksy w kolekcji o nazwie pets
:
db.pets.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true }, { "v" : 2, "hidden" : true, "key" : { "type" : 1 }, "name" : "type_1" } ]
Widzimy, że są trzy indeksy, a ostatnie dwa są ukryte. Wiemy to, ponieważ mają "hidden" : true
w ich definicji.
Odkryj za pomocą unhideIndexes()
Metoda
Pierwszym sposobem na odkrycie indeksu jest użycie db.collection.unhideIndex()
metoda. Ta metoda akceptuje nazwę indeksu lub jego wzorzec klucza jako parametr określający indeks do odkrycia.
Przykład:
db.pets.unhideIndex("idx_weight_-1")
Wyjście:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Wyjście unhideIndex()
metoda wyświetla starą wartość dla hidden
pole (w tym przypadku true
) i nową wartość (w tym przypadku false
).
Jeśli jednak odkryjemy już nieukryty indeks (lub ukryjemy już ukryty), nie są one wyświetlane i otrzymujemy tylko:
{ "ok" : 1 }
W każdym razie indeks jest teraz nieukryty.
unhideIndex()
metoda jest opakowaniem dla collMod
polecenie administracyjne (poniżej).
collMod
Polecenie
collMod
Polecenie administracyjne pozwala nam dodawać opcje do kolekcji lub modyfikować definicje widoków.
Możemy go użyć do odkrycia indeksu, przekazując hidden: false
:
Przykład:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Wynik:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Zwraca ten sam dokument co unhideIndex()
powraca.
Podobne do unhideIndex()
, masz możliwość określenia nazwy indeksu lub jego wzorca klucza.
Oto przykład użycia wzorca klucza:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
W tym przypadku indeks został zdefiniowany za pomocą { "type" : 1 }
, więc ta definicja może być używana zamiast nazwy indeksu.
Zweryfikuj zmiany
Aby zweryfikować nasze zmiany, możemy wywołać getIndexes()
ponownie, aby zobaczyć definicję indeksu:
db.pets.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Zgodnie z oczekiwaniami oba indeksy zostały ujawnione. Możemy je również ponownie ukryć, podając hidden: true
.
Nie możesz ukryć/odkryć indeksów? Sprawdź to ustawienie.
mongod
featureCompatibilityVersion
musi mieć co najmniej 4.4
zanim będzie można ukryć indeksy. Jednak po ukryciu indeks pozostanie ukryty nawet w przypadku featureCompatibilityVersion
ustawiony na 4.2 w plikach binarnych MongoDB 4.4.
Możesz sprawdzić featureCompatibilityVersion
ustawienie z następującym kodem:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Możesz to ustawić za pomocą setFeatureCompatibilityVersion
polecenie:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
polecenie musi być uruchomione w admin
baza danych.
Pamiętaj też, że nie możesz ukryć _id
indeks.