Os Ãndices ocultos não são visÃveis para o planejador de query e não podem ser usados para dar suporte a uma query.
Ocultando um Ãndice do planejador, você pode avaliar o impacto em potencial do descarte de um Ãndice sem realmente descartá-lo. Se o impacto for negativo, você poderá exibir o Ãndice em vez de ter que recriar um Ãndice descartado.
Comportamento
Além de ficarem ocultos do planejador, os Ãndices ocultos se comportam como Ãndices visÃveis. Por exemplo:
Se um Ãndice oculto for um Ãndice único, o Ãndice ainda aplicará sua restrição exclusiva aos documentos.
Se um Ãndice oculto for um Ãndice TTL, o Ãndice continua expirando documentos.
Os Ãndices ocultos são incluÃdos nos resultados
listIndexesedb.collection.getIndexes().Os Ãndices ocultos são atualizados após as operações de gravação na collection e continuam consumindo espaço em disco e memória. Como tal, eles são incluÃdos em várias operações estatÃsticas, como
db.collection.stats()e$indexStats.Ocultar um Ãndice exibido ou reexibir um Ãndice ocultado redefine seu
$indexStats. Ocultar um Ãndice já ocultado ou exibir um Ãndice não oculto não redefine o$indexStats.
Restrições
Para ocultar um Ãndice, você deve ter featureCompatibilityVersion configurado para
5.0ou superior.Não é possÃvel ocultar o Ãndice
_id.Você não pode
cursor.hint()um Ãndice oculto.
Exemplos
Criar um Ãndice oculto
Para criar um Ãndice hidden, utilize o método db.collection.createIndex() com a opção oculto configurada para true.
Observação
Para usar a opção hidden com db.collection.createIndex(), você deve ter o featureCompatibilityVersion configurado para 5.0 ou superior.
Por exemplo, a seguinte operação cria um Ãndice crescente oculto no campo borough:
db.addresses.createIndex( { borough: 1 }, { hidden: true } );
Para verificar, execute db.collection.getIndexes() na collection addresses:
db.addresses.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1 }, "name" : "borough_1", "hidden" : true } ]
A opção de Ãndice hidden só é retornada se o valor for true.
Ocultar um Ãndice existente
Observação
Para ocultar um Ãndice, você deve ter featureCompatibilityVersion configurado para
5.0ou superior.Não é possÃvel ocultar o Ãndice
_id.
To hide an existing index, you can use the collMod command or mongosh helper db.collection.hideIndex().
Por exemplo, crie um Ãndice sem ocultar:
db.restaurants.createIndex( { borough: 1, ratings: 1 } );
Para ocultar o Ãndice, você pode especificar:
o documento de especificação da chave de Ãndice para o método
db.collection.hideIndex():db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); // Specify the index key specification document o nome do Ãndice para o método
db.collection.hideIndex():db.restaurants.hideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, execute db.collection.getIndexes() na collection restaurants:
db.restaurants.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1", "hidden" : true } ]
A opção de Ãndice hidden só é retornada se o valor for true.
Mostrar um Ãndice existente
To unhide a hidden index, you can use the collMod command or mongosh helper db.collection.unhideIndex(). You can specify either:
o documento de especificação da chave de Ãndice para o método
db.collection.unhideIndex():db.restaurants.unhideIndex( { borough: 1, city: 1 } ); // Specify the index key specification document o nome do Ãndice para o método
db.collection.unhideIndex():db.restaurants.unhideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, execute db.collection.getIndexes() na collection restaurants:
db.restaurants.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1" } ]
A opção de Ãndice hidden não aparece mais como parte do Ãndice borough_1_ratings_1, pois o campo só é retornado se o valor for true.
Como os Ãndices são totalmente mantidos enquanto estão ocultos, o Ãndice fica imediatamente disponÃvel para uso quando são exibidos.