A partir de MongoDB 4.4, ahora podemos ocultar índices del plan de consulta. Esto nos permite evaluar el impacto potencial de eliminar un índice sin eliminarlo realmente.
Si ocultarlo tiene un impacto negativo, podemos mostrar el índice. Esto nos evita tener que eliminar el índice y luego volver a crearlo.
A continuación se muestran 3 formas de ocultar un índice en MongoDB.
El hideIndex()
Método
El db.collection.hideIndex()
El método hace exactamente lo que promete:oculta el índice (del planificador de consultas).
Ejemplo:
db.pets.hideIndex("idx_weight_-1")
Salida:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Eso esconde un índice llamado idx_weight_-1
en las pets
recopilación. Alternativamente, podríamos proporcionar el patrón clave para el índice en lugar del nombre.
La salida de hideIndex()
El método muestra el valor antiguo de hidden
campo (en este caso false
) y el nuevo valor (en este caso true
).
Sin embargo, si ocultamos un índice ya oculto (o mostramos uno que ya no está oculto), estos no se muestran y solo obtenemos lo siguiente:
{ "ok" : 1 }
En cualquier caso, el índice ahora está oculto.
El hideIndex()
El método es en realidad un contenedor para el 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 ocultar un índice pasando hidden: true
.
Ejemplo:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Resultado:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Esto devuelve el mismo documento que hideIndex()
regresa.
Similar a hideIndex()
, 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: { weight : -1 },
hidden: true
}
} )
En este caso, el índice se definió usando { weight : -1 }
, por lo que esta definición se puede utilizar en lugar del nombre del índice.
Para verificar esto, podemos usar getIndexes()
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", "hidden" : true } ]
También podemos mostrar el índice pasando hidden: false
.
Crear un índice oculto
La tercera forma de ocultar un índice es crearlo como un índice oculto.
Para hacer esto, use hidden: true
como una de las opciones al crear el índice.
Ejemplo:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Salida:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Ahora llamemos a getIndexes()
de nuevo para comprobar nuestro índice oculto recién creado:
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 se ha creado con "hidden": true
.
¿No puede ocultar í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.