Los Ãndices ocultos no son visibles para el planificador de queries y no pueden ser utilizados para respaldar una query.
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 los resultados de
listIndexesydb.collection.getIndexes().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
5.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 5.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
5.0o superior.No puedes ocultar el Ãndice
_id.
Para ocultar un Ãndice existente, puedes usar el comando collMod o el asistente mongosh 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.