Począwszy od MongoDB 4.4, możemy teraz ukrywać indeksy z planu zapytań. Pozwala nam to ocenić potencjalny wpływ porzucenia indeksu bez faktycznego porzucania indeksu.
Jeśli ukrycie go ma negatywny wpływ, możemy odkryć indeks. Dzięki temu nie musimy usuwać indeksu, a następnie tworzyć go ponownie.
Poniżej znajdują się 3 sposoby na ukrycie indeksu w MongoDB.
hideIndex() Metoda
db.collection.hideIndex() metoda robi dokładnie to, co obiecuje – ukrywa indeks (przed planerem zapytań).
Przykład:
db.pets.hideIndex("idx_weight_-1") Wyjście:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
To ukrywa indeks o nazwie idx_weight_-1 na pets kolekcja. Moglibyśmy alternatywnie podać wzorzec klucza dla indeksu zamiast nazwy.
Wyjście hideIndex() metoda wyświetla starą wartość dla hidden pole (w tym przypadku false ) i nową wartość (w tym przypadku true ).
Jeśli jednak ukryjemy już ukryty indeks (lub odkryjemy już nieukryty), nie są one wyświetlane, a otrzymujemy po prostu:
{ "ok" : 1 } W każdym razie indeks jest teraz ukryty.
hideIndex() metoda jest w rzeczywistości 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 ukrycia indeksu, przekazując hidden: true .
Przykład:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} ) Wynik:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Zwraca ten sam dokument co hideIndex() powraca.
Podobne do hideIndex() , masz możliwość określenia nazwy indeksu lub jego wzorca klucza.
Oto przykład użycia wzorca klucza:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
W tym przypadku indeks został zdefiniowany za pomocą { weight : -1 } , więc ta definicja może być używana zamiast nazwy indeksu.
Aby to sprawdzić, możemy użyć getIndexes() aby zobaczyć definicję indeksu:
db.pets.getIndexes() Wynik:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"weight" : -1
},
"name" : "idx_weight_-1",
"hidden" : true
}
]
Możemy również odkryć indeks, podając hidden: false .
Utwórz ukryty indeks
Trzecim sposobem ukrycia indeksu jest utworzenie go jako indeksu ukrytego.
Aby to zrobić, użyj hidden: true jako jedna z opcji podczas tworzenia indeksu.
Przykład:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
) Wyjście:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
Teraz wywołajmy getIndexes() ponownie, aby sprawdzić nasz nowo utworzony ukryty indeks:
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 został utworzony za pomocą "hidden": true .
Nie możesz ukryć 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.