Vanaf MongoDB 4.4 kunnen we nu indexen verbergen voor het queryplan. Dit stelt ons in staat om de potentiële impact van het laten vallen van een index te evalueren zonder de index daadwerkelijk te laten vallen.
Als het verbergen ervan een negatief effect heeft, kunnen we de index zichtbaar maken. Dit voorkomt dat we de index moeten verwijderen en opnieuw moeten maken.
Hieronder staan 3 manieren om een index in MongoDB te verbergen.
De hideIndex()
Methode
De db.collection.hideIndex()
methode doet precies wat het belooft - het verbergt de index (van de queryplanner).
Voorbeeld:
db.pets.hideIndex("idx_weight_-1")
Uitgang:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Dat verbergt een index genaamd idx_weight_-1
op de pets
verzameling. We kunnen ook het sleutelpatroon voor de index opgeven in plaats van de naam.
De uitvoer van de hideIndex()
methode geeft de oude waarde weer voor de hidden
veld (in dit geval false
) en de nieuwe waarde (in dit geval true
).
Als we echter een reeds verborgen index verbergen (of een reeds verborgen index zichtbaar maken), worden deze niet weergegeven en krijgen we alleen het volgende:
{ "ok" : 1 }
In ieder geval is de index nu verborgen.
De hideIndex()
methode is eigenlijk 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 te verbergen door hidden: true
. door te geven .
Voorbeeld:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Resultaat:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Dit retourneert hetzelfde document dat hideIndex()
retourneert.
Gelijk aan hideIndex()
, 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: { weight : -1 },
hidden: true
}
} )
In dit geval werd de index gedefinieerd met behulp van { weight : -1 }
, en dus kan deze definitie worden gebruikt in plaats van de indexnaam.
Om dit te verifiëren, kunnen we getIndexes()
. gebruiken 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", "hidden" : true } ]
We kunnen de index ook zichtbaar maken door hidden: false
. door te geven .
Maak een verborgen index
De derde manier om een index te verbergen, is door deze als een verborgen index te maken.
Gebruik hiervoor hidden: true
als een van de opties wanneer u de index maakt.
Voorbeeld:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Uitgang:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Laten we nu getIndexes()
. aanroepen nogmaals om onze nieuw gemaakte verborgen index te controleren:
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 het is gemaakt met "hidden": true
.
Kan indexen niet verbergen? 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.