MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

2 façons d'afficher un index dans MongoDB

Si vous avez un index caché dans MongoDB, vous pouvez utiliser le unhideIndex() méthode ou le collMod commande d'administration pour l'afficher.

Exemples d'index

Examinons les index d'une collection appelée pets :

db.pets.getIndexes()

Résultat :

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

Nous pouvons voir qu'il y a trois index, et les deux derniers sont cachés. Nous le savons car ils ont "hidden" : true dans leur définition.

Afficher à l'aide de unhideIndexes() Méthode

La première façon d'afficher un index est d'utiliser le db.collection.unhideIndex() méthode. Cette méthode accepte le nom de l'index ou son modèle de clé comme paramètre pour spécifier l'index à afficher.

Exemple :

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

Sortie :

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

La sortie de unhideIndex() la méthode affiche l'ancienne valeur pour le hidden champ (dans ce cas true ) et la nouvelle valeur (dans ce cas false ).

Cependant, si nous affichons un index déjà non masqué (ou en masquons un déjà masqué), ceux-ci ne sont pas affichés et nous obtenons simplement ce qui suit :

{ "ok" : 1 }

Dans tous les cas, l'index est maintenant affiché.

Le unhideIndex() method est un wrapper pour le collMod commande d'administration (ci-dessous).

Le collMod Commande

Le collMod La commande d'administration nous permet d'ajouter des options à une collection ou de modifier les définitions de vue.

Nous pouvons l'utiliser pour afficher un index en passant hidden: false :

Exemple :

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

Résultat :

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

Cela renvoie le même document que unhideIndex() renvoie.

Similaire à unhideIndex() , vous avez la possibilité de spécifier le nom de l'index ou son modèle de clé.

Voici un exemple d'utilisation du modèle de clé :

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { "type" : 1 },
      hidden: false
   }
} )

Dans ce cas, l'index a été défini en utilisant { "type" : 1 } , et donc cette définition peut être utilisée à la place du nom de l'index.

Vérifiez les modifications

Pour vérifier nos modifications, nous pouvons appeler getIndexes() à nouveau pour voir la définition de l'index :

db.pets.getIndexes()

Résultat :

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

Comme prévu, les deux index ont été affichés. On peut aussi les masquer à nouveau en passant hidden: true .

Impossible de masquer/afficher les index ? Vérifiez ce paramètre.

Le mongod featureCompatibilityVersion doit être au moins 4.4 avant de pouvoir masquer les index. Cependant, une fois caché, un index restera caché même avec featureCompatibilityVersion défini sur 4.2 sur les binaires MongoDB 4.4.

Vous pouvez vérifier le featureCompatibilityVersion paramètre avec le code suivant :

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

Vous pouvez le définir à l'aide de setFeatureCompatibilityVersion commande :

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

Le setFeatureCompatibilityVersion la commande doit être exécutée dans admin base de données.

Notez également que vous ne pouvez pas masquer le _id indice.