sql >> Base de Datos >  >> NoSQL >> MongoDB

2 formas de mostrar un índice en MongoDB

Si tiene un índice oculto en MongoDB, puede usar unhideIndex() método o el collMod comando de administración para mostrarlo.

Índices de ejemplo

Echemos un vistazo a los índices de una colección llamada 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 hay tres índices, y los dos últimos están ocultos. Lo sabemos porque tienen "hidden" : true en su definición.

Mostrar usando unhideIndexes() Método

La primera forma de mostrar un índice es usar db.collection.unhideIndex() método. Este método acepta el nombre del índice o su patrón clave como parámetro para especificar qué índice mostrar.

Ejemplo:

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

Salida:

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

La salida de unhideIndex() El método muestra el valor antiguo de hidden campo (en este caso true ) y el nuevo valor (en este caso false ).

Sin embargo, si mostramos un índice que ya no está oculto (u ocultamos uno que ya está oculto), estos no se muestran y solo obtenemos lo siguiente:

{ "ok" : 1 }

En cualquier caso, el índice ahora no está oculto.

El unhideIndex() El método es un contenedor para collMod comando de administración (abajo).

El collMod Comando

El collMod El comando de administración nos permite agregar opciones a una colección o modificar las definiciones de vista.

Podemos usarlo para mostrar un índice pasando hidden: false :

Ejemplo:

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

Resultado:

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

Esto devuelve el mismo documento que unhideIndex() regresa.

Similar a unhideIndex() , tiene la opción de especificar el nombre del índice o su patrón clave.

Aquí hay un ejemplo del uso del patrón clave:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { "type" : 1 },
      hidden: false
   }
} )

En este caso, el índice se definió usando { "type" : 1 } , por lo que esta definición se puede utilizar en lugar del nombre del índice.

Verificar los cambios

Para verificar nuestros cambios, podemos llamar a getIndexes() de nuevo para ver la definición del í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 era de esperar, ambos índices se han desocultado. También podemos ocultarlos nuevamente pasando hidden: true .

¿No puede ocultar/mostrar índices? Compruebe esta configuración.

El mongod featureCompatibilityVersion debe ser al menos 4.4 antes de poder ocultar índices. Sin embargo, una vez oculto, un índice permanecerá oculto incluso con featureCompatibilityVersion establecido en 4.2 en binarios MongoDB 4.4.

Puede consultar la featureCompatibilityVersion configuración con el siguiente código:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Puede configurarlo usando setFeatureCompatibilityVersion comando:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion el comando debe ejecutarse en el admin base de datos.

También tenga en cuenta que no puede ocultar el _id índice.