Med utgångspunkt från MongoDB 4.4 kan vi nu dölja index från frågeplanen. Detta gör det möjligt för oss att utvärdera den potentiella effekten av att ta bort ett index utan att faktiskt tappa indexet.
Om att dölja det har en negativ inverkan kan vi visa indexet. Detta gör att vi slipper släppa indexet och sedan återskapa det igen.
Nedan finns 3 sätt att dölja ett index i MongoDB.
hideIndex()
Metod
db.collection.hideIndex()
metoden gör precis som den lovar – den döljer indexet (från frågeplaneraren).
Exempel:
db.pets.hideIndex("idx_weight_-1")
Utdata:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Det döljer ett index som heter idx_weight_-1
på pets
samling. Vi kan alternativt tillhandahålla nyckelmönstret för indexet istället för namnet.
Utdata från hideIndex()
metoden visar det gamla värdet för hidden
fältet (i det här fallet false
) och det nya värdet (i detta fall true
).
Men om vi döljer ett redan dolt index (eller visar ett redan dolt) visas dessa inte, och vi får bara följande:
{ "ok" : 1 }
I alla fall är indexet nu dolt.
hideIndex()
Metoden är faktiskt 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 dölja ett index genom att skicka hidden: true
.
Exempel:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Resultat:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Detta returnerar samma dokument som hideIndex()
returnerar.
Liknar hideIndex()
, 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: { weight : -1 },
hidden: true
}
} )
I det här fallet definierades indexet med { weight : -1 }
, och så denna definition kan användas istället för indexnamnet.
För att verifiera detta kan vi använda getIndexes()
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", "hidden" : true } ]
Vi kan också visa indexet genom att skicka hidden: false
.
Skapa ett dolt index
Det tredje sättet att dölja ett index är att skapa det som ett dolt index.
För att göra detta, använd hidden: true
som ett av alternativen när du skapar indexet.
Exempel:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Utdata:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Låt oss nu anropa getIndexes()
igen för att kontrollera vårt nyskapade dolda index:
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 den har skapats med "hidden": true
.
Kan du inte dölja 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.