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

2 modi per scoprire un indice in MongoDB

Se hai un indice nascosto in MongoDB, puoi usare unhideIndex() metodo o il collMod comando di amministrazione per mostrarlo.

Indici di esempio

Diamo un'occhiata agli indici di una collezione chiamata pets :

db.pets.getIndexes()

Risultato:

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

Possiamo vedere che ci sono tre indici e gli ultimi due sono nascosti. Lo sappiamo perché hanno "hidden" : true nella loro definizione.

Scopri usando unhideIndexes() Metodo

Il primo modo per mostrare un indice è usare db.collection.unhideIndex() metodo. Questo metodo accetta il nome dell'indice o il relativo modello di chiave come parametro per specificare quale indice visualizzare.

Esempio:

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

Uscita:

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

L'output di unhideIndex() il metodo mostra il vecchio valore per hidden campo (in questo caso true ) e il nuovo valore (in questo caso false ).

Tuttavia, se mostriamo un indice già non nascosto (o ne nascondiamo uno già nascosto), questi non vengono visualizzati e otteniamo solo quanto segue:

{ "ok" : 1 }

In ogni caso, l'indice è ora visibile.

Il unhideIndex() è un wrapper per collMod comando di amministrazione (sotto).

Il collMod Comando

Il collMod Il comando di amministrazione ci consente di aggiungere opzioni a una raccolta o di modificare le definizioni delle viste.

Possiamo usarlo per mostrare un indice passando hidden: false :

Esempio:

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

Risultato:

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

Questo restituisce lo stesso documento che unhideIndex() resi.

Simile a unhideIndex() , hai la possibilità di specificare il nome dell'indice o il suo schema di chiave.

Ecco un esempio di utilizzo del pattern chiave:

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

In questo caso, l'indice è stato definito utilizzando { "type" : 1 } , quindi questa definizione può essere utilizzata al posto del nome dell'indice.

Verifica le modifiche

Per verificare le nostre modifiche, possiamo chiamare getIndexes() di nuovo per vedere la definizione dell'indice:

db.pets.getIndexes()

Risultato:

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

Come previsto, entrambi gli indici non sono stati nascosti. Possiamo anche nasconderli di nuovo passando hidden: true .

Non riesci a nascondere/mostrare gli indici? Controlla questa impostazione.

Il mongod featureCompatibilityVersion deve essere almeno 4.4 prima di poter nascondere gli indici. Tuttavia, una volta nascosto, un indice rimarrà nascosto anche con featureCompatibilityVersion impostato su 4.2 sui binari MongoDB 4.4.

Puoi controllare la featureCompatibilityVersion impostazione con il seguente codice:

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

Puoi impostarlo utilizzando setFeatureCompatibilityVersion comando:

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

Il setFeatureCompatibilityVersion il comando deve essere eseguito in admin banca dati.

Nota inoltre che non puoi nascondere il _id indice.