sql >> Database >  >> NoSQL >> MongoDB

2 manieren om een ​​index zichtbaar te maken in MongoDB

Als je een verborgen index hebt in MongoDB, kun je de unhideIndex() gebruiken methode of de collMod administratie commando om het zichtbaar te maken.

Voorbeeldindexen

Laten we eens kijken naar de indexen van een verzameling genaamd pets :

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 er drie indexen zijn, en de laatste twee zijn verborgen. We weten dit omdat ze "hidden" : true . hebben in hun definitie.

Maak zichtbaar met behulp van de unhideIndexes() Methode

De eerste manier om een ​​index zichtbaar te maken is door de db.collection.unhideIndex() te gebruiken methode. Deze methode accepteert de naam van de index of het sleutelpatroon als parameter om aan te geven welke index zichtbaar moet worden gemaakt.

Voorbeeld:

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

Uitgang:

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

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

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

{ "ok" : 1 }

In ieder geval is de index nu zichtbaar.

De unhideIndex() methode is 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 zichtbaar te maken door hidden: false door te geven :

Voorbeeld:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "type_1",
      hidden: false
   }
} )

Resultaat:

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

Dit retourneert hetzelfde document dat unhideIndex() retourneert.

Gelijk aan unhideIndex() , 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: { "type" : 1 },
      hidden: false
   }
} )

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

Controleer de wijzigingen

Om onze wijzigingen te verifiëren, kunnen we getIndexes() . aanroepen nogmaals 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"
	},
	{
		"v" : 2,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Zoals verwacht zijn beide indexen zichtbaar gemaakt. We kunnen ze ook weer verbergen door hidden: true . door te geven .

Kan indexen niet verbergen/weergeven? 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. Redis zoeken naar hashes op veldwaarden

  2. Meteor collectie-update met traditionele id

  3. flushdb wist niet alle sleutels in redis?

  4. GridFS in Spring Data MongoDB