sql >> Database >  >> NoSQL >> MongoDB

3 manieren om een ​​index te verbergen voor het queryplan in MongoDB

Vanaf MongoDB 4.4 kunnen we nu indexen verbergen voor het queryplan. Dit stelt ons in staat om de potentiële impact van het laten vallen van een index te evalueren zonder de index daadwerkelijk te laten vallen.

Als het verbergen ervan een negatief effect heeft, kunnen we de index zichtbaar maken. Dit voorkomt dat we de index moeten verwijderen en opnieuw moeten maken.

Hieronder staan ​​3 manieren om een ​​index in MongoDB te verbergen.

De hideIndex() Methode

De db.collection.hideIndex() methode doet precies wat het belooft - het verbergt de index (van de queryplanner).

Voorbeeld:

db.pets.hideIndex("idx_weight_-1")

Uitgang:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Dat verbergt een index genaamd idx_weight_-1 op de pets verzameling. We kunnen ook het sleutelpatroon voor de index opgeven in plaats van de naam.

De uitvoer van de hideIndex() methode geeft de oude waarde weer voor de hidden veld (in dit geval false ) en de nieuwe waarde (in dit geval true ).

Als we echter een reeds verborgen index verbergen (of een reeds verborgen index zichtbaar maken), worden deze niet weergegeven en krijgen we alleen het volgende:

{ "ok" : 1 }

In ieder geval is de index nu verborgen.

De hideIndex() methode is eigenlijk een wrapper voor de collMod administratie commando (hieronder).

De collMod Commando

De collMod administratie commando stelt ons in staat om opties toe te voegen aan een collectie of om weergavedefinities te wijzigen.

We kunnen het gebruiken om een ​​index te verbergen door hidden: true . door te geven .

Voorbeeld:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "idx_weight_-1",
      hidden: true
   }
} )

Resultaat:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Dit retourneert hetzelfde document dat hideIndex() retourneert.

Gelijk aan hideIndex() , hebt u de mogelijkheid om de indexnaam of het sleutelpatroon op te geven.

Hier is een voorbeeld van het gebruik van het toetspatroon:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { weight : -1 },
      hidden: true
   }
} )

In dit geval werd de index gedefinieerd met behulp van { weight : -1 } , en dus kan deze definitie worden gebruikt in plaats van de indexnaam.

Om dit te verifiëren, kunnen we getIndexes() . gebruiken om de definitie van de index te zien:

db.pets.getIndexes()

Resultaat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	}
]

We kunnen de index ook zichtbaar maken door hidden: false . door te geven .

Maak een verborgen index

De derde manier om een ​​index te verbergen, is door deze als een verborgen index te maken.

Gebruik hiervoor hidden: true als een van de opties wanneer u de index maakt.

Voorbeeld:

db.pets.createIndex( 
    { type: 1 },
    { hidden: true }
)

Uitgang:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"ok" : 1
}

Laten we nu getIndexes() . aanroepen nogmaals om onze nieuw gemaakte verborgen index te controleren:

db.pets.getIndexes()

Resultaat:

[
	{
		"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"
	}
]

We kunnen zien dat het is gemaakt met "hidden": true .

Kan indexen niet verbergen? Vink deze instelling aan.

De mongod featureCompatibilityVersion moet minimaal 4.4 . zijn voordat u indexen kunt verbergen. Eenmaal verborgen, blijft een index echter verborgen, zelfs met featureCompatibilityVersion ingesteld op 4.2 op MongoDB 4.4 binaire bestanden.

U kunt de featureCompatibilityVersion . controleren instelling met de volgende code:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

U kunt het instellen met behulp van de setFeatureCompatibilityVersion commando:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

De setFeatureCompatibilityVersion commando moet worden uitgevoerd in de admin database.

Merk ook op dat u de _id . niet kunt verbergen index.


  1. MongoDB $pow

  2. Locatie van de mongodb-database op mac

  3. MongoDB-as-a-Service in Canada

  4. Groeperen op som mongodb