Hvis du har et skjult indeks i MongoDB, kan du bruge unhideIndex()
metoden eller collMod
administrationskommando for at vise det.
Eksempler på indekser
Lad os tage et kig på indekserne på en samling kaldet pets
:
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 der er tre indekser, og de sidste to er skjulte. Vi ved dette, fordi de har "hidden" : true
i deres definition.
Få vist ved hjælp af unhideIndexes()
Metode
Den første måde at vise et indeks på er at bruge db.collection.unhideIndex()
metode. Denne metode accepterer navnet på indekset eller dets nøglemønster som en parameter for at angive, hvilket indeks der skal vises.
Eksempel:
db.pets.unhideIndex("idx_weight_-1")
Output:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Outputtet af unhideIndex()
metoden viser den gamle værdi for hidden
felt (i dette tilfælde true
) og den nye værdi (i dette tilfælde false
).
Men hvis vi viser et allerede skjult indeks (eller skjuler et allerede skjult), vises disse ikke, og vi får bare følgende:
{ "ok" : 1 }
Under alle omstændigheder er indekset nu skjult.
unhideIndex()
metoden er 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 vise et indeks ved at sende hidden: false
:
Eksempel:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Resultat:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Dette returnerer det samme dokument som unhideIndex()
vender tilbage.
Svarende til unhideIndex()
, 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: { "type" : 1 },
hidden: false
}
} )
I dette tilfælde blev indekset defineret ved hjælp af { "type" : 1 }
, og derfor kan denne definition bruges i stedet for indeksnavnet.
Bekræft ændringerne
For at bekræfte vores ændringer kan vi kalde getIndexes()
igen 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" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Som forventet er begge indekser blevet skjult. Vi kan også skjule dem igen ved at sende hidden: true
.
Kan du ikke skjule/vise 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.