Los índices ocultos no son visibles para los planificador de consultas y no se puede usar para soportar una consulta.
Al ocultar un índice al planificador, puede evaluar el posible impacto de eliminar un índice sin realmente eliminarlo. Si el impacto es negativo, se puede mostrar el índice en lugar de tener que recrear un índice descartado.
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 sigue aplicando su restricción de unicidad a los documentos.
Si un índice oculto es un índice TTL, el índice sigue expirando documentos.
Los índices ocultos se incluyen en
listIndexesydb.collection.getIndexes()resultados.Los índices ocultos se actualizan cuando se realizan operaciones de escritura en la colección y siguen consumiendo espacio de disco y memoria. Como tal, se incluyen en varias operaciones estadísticas, tales como
db.collection.stats()y$indexStats.Ocultar un índice desoculto o mostrar un índice oculto restablece su
$indexStats. Ocultar un índice ya oculto o desocultar un índice ya desocultado no restablece el$indexStats.
Restricciones
Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de
6.0o superior.No puedes ocultar el índice
_id.No se puede
cursor.hint()un índice oculto.
Ejemplos
Crea un índice oculto
Para crear un índice de hidden, utiliza el método db.collection.createIndex() con la opción hidden configurada en true.
Nota
Para usar la opción hidden con db.collection.createIndex(), debes tener featureCompatibilityVersion configurado en 6.0 o superior.
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 db.collection.getIndexes() en la colección addresses:
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
6.0o superior.No puedes ocultar el índice
_id.
Para ocultar un índice existente, puedes utilizar el comando collMod, o mongosh asistente db.collection.hideIndex().
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 la clave de índice para el método
db.collection.hideIndex():db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); // Specify the index key specification document el nombre del índice al método
db.collection.hideIndex():db.restaurants.hideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, ejecute db.collection.getIndexes() en la colección restaurants:
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.
Volver a mostrar un índice existente
Para mostrar un índice oculto, puede utilizar el comando collMod o el asistente mongosh db.collection.unhideIndex(). Se puede especificar cualquiera de las siguientes opciones:
el documento de especificación de la clave de índice para el método
db.collection.unhideIndex():db.restaurants.unhideIndex( { borough: 1, city: 1 } ); // Specify the index key specification document el nombre del índice al método
db.collection.unhideIndex():db.restaurants.unhideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, ejecute db.collection.getIndexes() en la colección restaurants:
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 muestra si el valor es true.
Debido a que los índices se mantienen completamente mientras están ocultos, el índice está disponible inmediatamente para su uso una vez que se desoculta.