Om du har ett dolt index i MongoDB kan du använda unhideIndexes()
metoden eller collMod
administrationskommando för att visa det.
Exempelindex
Låt oss ta en titt på indexen för en samling som heter 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 att det finns tre index, och de två sista är dolda. Vi vet detta eftersom de har "hidden" : true
i deras definition.
Visa med unhideIndexes()
Metod
Det första sättet att visa ett index är att använda db.collection.unhideIndex()
metod. Denna metod accepterar namnet på indexet eller dess nyckelmönster som en parameter för att ange vilket index som ska visas.
Exempel:
db.pets.unhideIndex("idx_weight_-1")
Utdata:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Utdata från unhideIndexes()
metoden visar det gamla värdet för hidden
fältet (i det här fallet true
) och det nya värdet (i det här fallet false
).
Men om vi visar ett redan dolt index (eller döljer ett redan dolt) visas dessa inte, och vi får bara följande:
{ "ok" : 1 }
Hur som helst är indexet nu odollat.
unhideIndexes()
metoden är ett omslag för collMod
administrationskommando (nedan).
collMod
Kommando
collMod
administrationskommandot gör det möjligt för oss att lägga till alternativ till en samling eller att ändra vydefinitioner.
Vi kan använda den för att visa ett index genom att skicka hidden: false
:
Exempel:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Resultat:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Detta returnerar samma dokument som unhideIndexes()
returnerar.
Liknar unhideIndexes()
, har du möjlighet att ange indexnamnet eller dess nyckelmönster.
Här är ett exempel på hur du använder nyckelmönstret:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
I det här fallet definierades indexet med { "type" : 1 }
, och så denna definition kan användas istället för indexnamnet.
Verifiera ändringarna
För att verifiera våra ändringar kan vi anropa getIndexes()
igen för att se indexets 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 väntat har båda indexen varit odolda. Vi kan också dölja dem igen genom att skicka hidden: true
.
Kan du inte dölja/visa index? Kontrollera den här inställningen.
mongod
featureCompatibilityVersion
måste vara minst 4.4
innan du kan dölja index. Men när det väl är dolt kommer ett index att förbli dolt även med featureCompatibilityVersion
inställd på 4.2 på MongoDB 4.4 binärer.
Du kan kontrollera featureCompatibilityVersion
inställning med följande kod:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Du kan ställa in den med setFeatureCompatibilityVersion
kommando:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
kommandot måste köras i admin
databas.
Observera också att du inte kan dölja _id
index.