MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

2 maneiras de exibir um índice no MongoDB


Se você tiver um índice oculto no MongoDB, poderá usar o unhideIndex() método ou o collMod comando de administração para reexibi-lo.

Exemplos de índices


Vamos dar uma olhada nos índices de uma coleção chamada pets :
db.pets.getIndexes()

Resultado:
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	},
	{
		"v" : 2,
		"hidden" : true,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Podemos ver que existem três índices e os dois últimos estão ocultos. Sabemos disso porque eles têm "hidden" : true em sua definição.

Reexibir usando o unhideIndexes() Método


A primeira maneira de exibir um índice é usar o db.collection.unhideIndex() método. Esse método aceita o nome do índice ou seu padrão de chave como um parâmetro para especificar qual índice exibir.

Exemplo:
db.pets.unhideIndex("idx_weight_-1")

Saída:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

A saída do unhideIndex() método exibe o valor antigo para o hidden campo (neste caso true ) e o novo valor (neste caso false ).

No entanto, se exibirmos um índice já não oculto (ou ocultar um já oculto), eles não serão exibidos e obteremos apenas o seguinte:
{ "ok" : 1 }

De qualquer forma, o índice agora é reexibido.

O unhideIndex() é um wrapper para o collMod comando de administração (abaixo).

O collMod Comando


O collMod O comando de administração nos permite adicionar opções a uma coleção ou modificar as definições de visualização.

Podemos usá-lo para exibir um índice passando hidden: false :

Exemplo:
db.runCommand( {
   collMod: "pets",
   index: {
      name: "type_1",
      hidden: false
   }
} )

Resultado:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

Isso retorna o mesmo documento que unhideIndex() retorna.

Semelhante a unhideIndex() , você tem a opção de especificar o nome do índice ou seu padrão de chave.

Aqui está um exemplo de uso do padrão de chave:
db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { "type" : 1 },
      hidden: false
   }
} )

Nesse caso, o índice foi definido usando { "type" : 1 } , e, portanto, essa definição pode ser usada em vez do nome do índice.

Verifique as alterações


Para verificar nossas alterações, podemos chamar getIndexes() novamente para ver a definição do índice:
db.pets.getIndexes()

Resultado:
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1"
	},
	{
		"v" : 2,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Como esperado, ambos os índices foram reexibidos. Também podemos ocultá-los novamente passando hidden: true .

Não é possível ocultar/exibir índices? Verifique esta configuração.


O mongod featureCompatibilityVersion deve ser pelo menos 4.4 antes que você possa ocultar índices. No entanto, uma vez oculto, um índice permanecerá oculto mesmo com featureCompatibilityVersion definido como 4.2 nos binários do MongoDB 4.4.

Você pode verificar a featureCompatibilityVersion configuração com o seguinte código:
db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Você pode configurá-lo usando o setFeatureCompatibilityVersion comando:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

A setFeatureCompatibilityVersion comando precisa ser executado no admin base de dados.

Observe também que você não pode ocultar o _id índice.