sql >> Database teknologi >  >> NoSQL >> MongoDB

3 måder at skjule et indeks fra forespørgselsplanen i MongoDB

Fra MongoDB 4.4 kan vi nu skjule indekser fra forespørgselsplanen. Dette sætter os i stand til at evaluere den potentielle effekt af at droppe et indeks uden faktisk at droppe indekset.

Hvis det har en negativ indvirkning at skjule det, kan vi vise indekset. Dette sparer os for at skulle droppe indekset og derefter genskabe det igen.

Nedenfor er 3 måder at skjule et indeks på i MongoDB.

hideIndex() Metode

db.collection.hideIndex() metoden gør præcis, som den lover – den skjuler indekset (fra forespørgselsplanlæggeren).

Eksempel:

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

Output:

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

Det skjuler et indeks kaldet idx_weight_-1pets kollektion. Vi kunne alternativt angive nøglemønsteret for indekset i stedet for navnet.

Outputtet af hideIndex() metoden viser den gamle værdi for hidden felt (i dette tilfælde false ) og den nye værdi (i dette tilfælde true ).

Men hvis vi skjuler et allerede skjult indeks (eller viser et allerede skjult indeks), vises disse ikke, og vi får bare følgende:

{ "ok" : 1 }

Under alle omstændigheder er indekset nu skjult.

hideIndex() metoden er faktisk 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 skjule et indeks ved at sende hidden: true .

Eksempel:

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

Resultat:

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

Dette returnerer det samme dokument som hideIndex() vender tilbage.

Svarende til hideIndex() , 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: { weight : -1 },
      hidden: true
   }
} )

I dette tilfælde blev indekset defineret ved hjælp af { weight : -1 } , og derfor kan denne definition bruges i stedet for indeksnavnet.

For at bekræfte dette kan vi bruge getIndexes() 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",
		"hidden" : true
	}
]

Vi kan også vise indekset ved at sende hidden: false .

Opret et skjult indeks

Den tredje måde at skjule et indeks på er at oprette det som et skjult indeks.

For at gøre dette skal du bruge hidden: true som en af ​​mulighederne, når du opretter indekset.

Eksempel:

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

Output:

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

Lad os nu kalde getIndexes() igen for at tjekke vores nyoprettede skjulte indeks:

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 det er blevet oprettet med "hidden": true .

Kan du ikke skjule 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.


  1. Hvordan bruger man Redis i et C++ program?

  2. Installer MongoDB Community Edition 4.0 på Linux

  3. Transaktionssupport i MongoDB

  4. Hvorfor har vi brug for en 'arbiter' i MongoDB-replikering?