Als je een verborgen index hebt in MongoDB, kun je de unhideIndex()
gebruiken methode of de collMod
administratie commando om het zichtbaar te maken.
Voorbeeldindexen
Laten we eens kijken naar de indexen van een verzameling genaamd pets
:
db.pets.getIndexes()
Resultaat:
[ { "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" } ]
We kunnen zien dat er drie indexen zijn, en de laatste twee zijn verborgen. We weten dit omdat ze "hidden" : true
. hebben in hun definitie.
Maak zichtbaar met behulp van de unhideIndexes()
Methode
De eerste manier om een index zichtbaar te maken is door de db.collection.unhideIndex()
te gebruiken methode. Deze methode accepteert de naam van de index of het sleutelpatroon als parameter om aan te geven welke index zichtbaar moet worden gemaakt.
Voorbeeld:
db.pets.unhideIndex("idx_weight_-1")
Uitgang:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
De uitvoer van de unhideIndex()
methode geeft de oude waarde weer voor de hidden
veld (in dit geval true
) en de nieuwe waarde (in dit geval false
).
Als we echter een reeds niet-verborgen index zichtbaar maken (of een reeds verborgen index verbergen), worden deze niet weergegeven en krijgen we alleen het volgende:
{ "ok" : 1 }
In ieder geval is de index nu zichtbaar.
De unhideIndex()
methode is een wrapper voor de collMod
administratie commando (hieronder).
De collMod
Commando
De collMod
administratie commando stelt ons in staat om opties toe te voegen aan een collectie of om weergavedefinities te wijzigen.
We kunnen het gebruiken om een index zichtbaar te maken door hidden: false
door te geven :
Voorbeeld:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Resultaat:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Dit retourneert hetzelfde document dat unhideIndex()
retourneert.
Gelijk aan unhideIndex()
, hebt u de mogelijkheid om de indexnaam of het sleutelpatroon op te geven.
Hier is een voorbeeld van het gebruik van het toetspatroon:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
In dit geval werd de index gedefinieerd met { "type" : 1 }
, en dus kan deze definitie worden gebruikt in plaats van de indexnaam.
Controleer de wijzigingen
Om onze wijzigingen te verifiëren, kunnen we getIndexes()
. aanroepen nogmaals om de definitie van de index te zien:
db.pets.getIndexes()
Resultaat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Zoals verwacht zijn beide indexen zichtbaar gemaakt. We kunnen ze ook weer verbergen door hidden: true
. door te geven .
Kan indexen niet verbergen/weergeven? Vink deze instelling aan.
De mongod
featureCompatibilityVersion
moet minimaal 4.4
. zijn voordat u indexen kunt verbergen. Eenmaal verborgen, blijft een index echter verborgen, zelfs met featureCompatibilityVersion
ingesteld op 4.2 op MongoDB 4.4 binaire bestanden.
U kunt de featureCompatibilityVersion
. controleren instelling met de volgende code:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
U kunt het instellen met behulp van de setFeatureCompatibilityVersion
commando:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
De setFeatureCompatibilityVersion
commando moet worden uitgevoerd in de admin
database.
Merk ook op dat u de _id
. niet kunt verbergen index.