Los índices ocultos no son visibles para el Planificador de consultas y no se puede utilizar para respaldar una consulta.
Al ocultar un índice del planificador, puede evaluar el impacto potencial de eliminarlo sin eliminarlo realmente. Si el impacto es negativo, puede mostrarlo en lugar de tener que volver a crearlo.
Comportamiento
Además de estar ocultos para el planificador, los índices ocultos se comportan como índices que no están ocultos. Por ejemplo:
Si un índice oculto es un índice único, el índice aún aplica su restricción única a los documentos.
Si un índice oculto es un índice TTL, el índice aún hace caducar los documentos.
Los índices ocultos están incluidos en
listIndexesdb.collection.getIndexes()Resultados y.Los índices ocultos se actualizan al escribir en la colección y siguen consumiendo espacio en disco y memoria. Por ello, se incluyen en diversas operaciones estadísticas, como
db.collection.stats()$indexStatsy.Ocultar o mostrar un índice no oculto restablece su
$indexStatsvalor. Ocultar o mostrar un índice ya oculto no restablece su$indexStatsvalor.
Restricciones
Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de
5.0o superior.No puedes ocultar el índice
_id.No se puede un índice
cursor.hint()oculto.
Ejemplos
Crear un índice oculto
Para crear un hidden índice, utilice el método db.collection.createIndex() con la opción oculta establecida true en.
Nota
Para utilizar la hidden opción con,db.collection.createIndex() debe tener featureCompatibilityVersion configurado en 5.0 o mayor.
Por ejemplo, la siguiente operación crea un índice ascendente oculto en el campo borough:
db.addresses.createIndex( { borough: 1 }, { hidden: true } );
Para verificar, ejecute en db.collection.getIndexes() la addresses colección:
db.addresses.getIndexes()
La operación devuelve la siguiente información:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1 }, "name" : "borough_1", "hidden" : true } ]
La opción de índice hidden solo se devuelve si el valor es true.
Ocultar un índice existente
Nota
Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de
5.0o superior.No puedes ocultar el índice
_id.
Para ocultar un índice existente, puede utilizar el comando collMod o mongosh db.collection.hideIndex()ayudante.
Por ejemplo, crear un índice sin ocultar:
db.restaurants.createIndex( { borough: 1, ratings: 1 } );
Para ocultar el índice, puedes especificar:
El documento de especificación de clave de índice para el
db.collection.hideIndex()método:db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); // Specify the index key specification document el nombre del
db.collection.hideIndex()índice del método:db.restaurants.hideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, ejecute en db.collection.getIndexes() la restaurants colección:
db.restaurants.getIndexes()
La operación devuelve la siguiente información:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1", "hidden" : true } ]
La opción de índice hidden solo se devuelve si el valor es true.
Mostrar un índice existente
Para mostrar un índice oculto, puede usar el collMod comando o mongosh db.collection.unhideIndex()el asistente. Puede especificar:
El documento de especificación de clave de índice para el
db.collection.unhideIndex()método:db.restaurants.unhideIndex( { borough: 1, city: 1 } ); // Specify the index key specification document el nombre del
db.collection.unhideIndex()índice del método:db.restaurants.unhideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, ejecute en db.collection.getIndexes() la restaurants colección:
db.restaurants.getIndexes()
La operación devuelve la siguiente información:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1" } ]
La opción de índice hidden ya no aparece como parte del índice borough_1_ratings_1 ya que el campo solo se devuelve si el valor es true.
Debido a que los índices se mantienen completamente mientras están ocultos, el índice está inmediatamente disponible para su uso una vez que se revela.