Fra MongoDB 4.4 kan vi nu skjule indekser fra forespørgselsplanen. Dette sætter os i stand til at evaluere den potentielle effekt af at droppe et indeks uden faktisk at droppe indekset.
Hvis det har en negativ indvirkning at skjule det, kan vi vise indekset. Dette sparer os for at skulle droppe indekset og derefter genskabe det igen.
Nedenfor er 3 måder at skjule et indeks på i MongoDB.
hideIndex()
Metode
db.collection.hideIndex()
metoden gør præcis, som den lover – den skjuler indekset (fra forespørgselsplanlæggeren).
Eksempel:
db.pets.hideIndex("idx_weight_-1")
Output:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Det skjuler et indeks kaldet idx_weight_-1
på pets
kollektion. Vi kunne alternativt angive nøglemønsteret for indekset i stedet for navnet.
Outputtet af hideIndex()
metoden viser den gamle værdi for hidden
felt (i dette tilfælde false
) og den nye værdi (i dette tilfælde true
).
Men hvis vi skjuler et allerede skjult indeks (eller viser et allerede skjult indeks), vises disse ikke, og vi får bare følgende:
{ "ok" : 1 }
Under alle omstændigheder er indekset nu skjult.
hideIndex()
metoden er faktisk en indpakning for collMod
administrationskommando (nedenfor).
collMod
Kommando
collMod
administrationskommando gør det muligt for os at tilføje muligheder til en samling eller at ændre visningsdefinitioner.
Vi kan bruge det til at skjule et indeks ved at sende hidden: true
.
Eksempel:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Resultat:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Dette returnerer det samme dokument som hideIndex()
vender tilbage.
Svarende til hideIndex()
, har du mulighed for at angive indeksnavnet eller dets nøglemønster.
Her er et eksempel på brug af nøglemønsteret:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
I dette tilfælde blev indekset defineret ved hjælp af { weight : -1 }
, og derfor kan denne definition bruges i stedet for indeksnavnet.
For at bekræfte dette kan vi bruge getIndexes()
for at se indeksets definition:
db.pets.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Vi kan også vise indekset ved at sende hidden: false
.
Opret et skjult indeks
Den tredje måde at skjule et indeks på er at oprette det som et skjult indeks.
For at gøre dette skal du bruge hidden: true
som en af mulighederne, når du opretter indekset.
Eksempel:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Output:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Lad os nu kalde getIndexes()
igen for at tjekke vores nyoprettede skjulte indeks:
db.pets.getIndexes()
Resultat:
[ { "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" } ]
Vi kan se, at det er blevet oprettet med "hidden": true
.
Kan du ikke skjule indekser? Tjek denne indstilling.
mongod
featureCompatibilityVersion
skal være mindst 4.4
før du kan skjule indekser. Men når et indeks først er skjult, forbliver det skjult selv med featureCompatibilityVersion
sat til 4.2 på MongoDB 4.4 binære filer.
Du kan tjekke featureCompatibilityVersion
indstilling med følgende kode:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Du kan indstille det ved hjælp af setFeatureCompatibilityVersion
kommando:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
kommandoen skal køres i admin
database.
Bemærk også, at du ikke kan skjule _id
indeks.