Pokud máte v MongoDB skrytý index, můžete použít unhideIndex()
nebo collMod
příkaz administrace k jejímu zobrazení.
Příklady indexů
Podívejme se na indexy kolekce nazvané pets
:
db.pets.getIndexes()
Výsledek:
[ { "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" } ]
Vidíme, že existují tři indexy a poslední dva jsou skryté. Víme to, protože mají "hidden" : true
v jejich definici.
Zrušte skrytí pomocí unhideIndexes()
Metoda
První způsob, jak odkrýt index, je použít db.collection.unhideIndex()
metoda. Tato metoda přijímá název indexu nebo jeho klíčový vzor jako parametr pro určení, který index se má odkrýt.
Příklad:
db.pets.unhideIndex("idx_weight_-1")
Výstup:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Výstup unhideIndex()
metoda zobrazí starou hodnotu pro hidden
pole (v tomto případě true
) a novou hodnotu (v tomto případě false
).
Pokud však odkryjeme již neskrytý index (nebo skryjeme již skrytý), tyto se nezobrazí a dostaneme pouze následující:
{ "ok" : 1 }
V každém případě je index nyní nekrytý.
unhideIndex()
metoda je obal pro collMod
administrační příkaz (níže).
collMod
Příkaz
collMod
administrační příkaz nám umožňuje přidávat možnosti do kolekce nebo upravovat definice zobrazení.
Můžeme jej použít k odkrytí indexu předáním hidden: false
:
Příklad:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Výsledek:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
To vrátí stejný dokument jako unhideIndex()
vrátí.
Podobné jako unhideIndex()
, máte možnost zadat název indexu nebo jeho klíčový vzor.
Zde je příklad použití vzoru klíče:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
V tomto případě byl index definován pomocí { "type" : 1 }
, a tak lze tuto definici použít místo názvu indexu.
Ověřte změny
Pro ověření našich změn můžeme zavolat getIndexes()
znovu, abyste viděli definici indexu:
db.pets.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Jak se očekávalo, oba indexy byly odkryty. Můžeme je také znovu skrýt předáním hidden: true
.
Nelze skrýt/odkrýt indexy? Zkontrolujte toto nastavení.
mongod
featureCompatibilityVersion
musí být alespoň 4.4
než budete moci skrýt indexy. Jakmile je však index skrytý, zůstane skrytý i s featureCompatibilityVersion
nastaveno na 4.2 na binárních souborech MongoDB 4.4.
Můžete zkontrolovat featureCompatibilityVersion
nastavení pomocí následujícího kódu:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Můžete jej nastavit pomocí setFeatureCompatibilityVersion
příkaz:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
příkaz je třeba spustit v admin
databáze.
Pamatujte také, že nemůžete skrýt _id
index.