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.