sql >> Databasteknik >  >> NoSQL >> MongoDB

3 sätt att dölja ett index från frågeplanen i MongoDB

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_-1pets 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.


  1. Kopiera/klona en samling i MongoDB

  2. Selleri ger anslutningen återställs av peer

  3. Fem tips för bättre MongoDB-värd på Azure

  4. Hur man korrekt återanvänder anslutning till Mongodb över NodeJs applikation och moduler