Os índices ocultos não são visíveis para oplanejador 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.
Para ocultar um índice existente, você pode usar o comando collMod ou mongosh assistente 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
Para exibir um índice oculto, você pode usar o comando collMod ou mongosh auxiliar db.collection.unhideIndex(). Você pode especificar:
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.