dropIndexesModificado en la versión 5.0.
El comando
dropIndexesdescarta uno o más índices (excepto el índice en el campo_idy el último índice de clave fragmentada restante, si existe) de la colección especificada.Tip
En
mongosh, este comando también se puede ejecutar a través deldb.collection.dropIndex()ydb.collection.dropIndexes()métodos asistentes..Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando tiene la siguiente sintaxis:
{ dropIndexes: <string>, index: <string|document|arrayofstrings>, writeConcern: <document>, comment: <any> }
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
dropIndexes | String | El nombre de la colección cuyos índices se eliminarán. |
index | string o documento o arreglo de cadenas | El índice o los índices que se van a descartar.
|
writeConcern | Documento | Opcional. Un documento que expresa el nivel de confirmación de escritura del comando |
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Comportamiento
A partir de MongoDB,5.0 dropIndexes genera un error si se intenta usarlo para eliminar el último índice compatible con la clave de fragmento restante. Al pasar "*" a dropIndexes se eliminan todos los índices excepto el _id índice y el último índice compatible con la clave de fragmento restante, si existe.
Eliminar únicamente las consultas relacionadas
La dropIndexes operación solo cancela las queries que están utilizando el índice que se descartará. Esto puede incluir consultas que consideren el índice como parte de la planificación de consultas.
Bloqueo de recursos
dropIndexes obtiene un bloqueo exclusivo en la colección especificada por el tiempo que dure la operación. Todas las operaciones posteriores en la colección deben esperar hasta que dropIndexes libere el bloqueo.
Nombres de índices
Si al método se le pasa un arreglo de nombres de índices que incluye un índice inexistente, el método genera un error sin eliminar ninguno de los índices especificados.
_id Index
No se puede descartar el índice por defecto en el campo _id.
text Indexes
Para descartar un índice de texto, especifica el nombre del índice en lugar del documento de especificación del índice.
Abortar creaciones de índices en curso
Novedades de la versión 4.4: Si un índice especificado en dropIndexes aún se está compilando, intenta anular la compilación endropIndexes dropIndexes curso. Anular la compilación de un índice tiene el mismo efecto que descartar el índice compilado. Antes de MongoDB 4.4, devolvía un error si la colección tenía compilaciones de índice en curso.
Para conjuntos de réplicas, ejecuta dropIndexes en el principal. El primario aborta la creación del índice y crea una entrada "abortIndexBuild" asociada en el registro oplog. Los nodos secundarios que replican la entrada "abortIndexBuild" en el oplog abortan la creación del índice que estaba en curso y descartan la tarea de creación. Consulta Proceso de creación de índices para obtener documentación detallada sobre el proceso de creación de índices y los momentos específicos para terminar una creación de índices en curso.
Los índices especificados en dropIndexes deben ser el conjunto completo de compilaciones en curso asociados a una sola operación de createIndexes o db.collection.createIndexes(). Para descartar un índice específico de un conjunto de compilaciones en curso relacionadas, espera a que se completen las creación de índices y especifica ese índice en dropIndexes.
Por ejemplo, una operación de createIndexes / createIndexes() crea tres índices. Suponiendo que las tres creación de índices estén en proceso, dropIndexes debe especificar los tres índices para abortar las creación de índices.
Usar currentOp para identificar las creación de índices asociadas a una createIndexes / createIndexes() operación. Consulta Operaciones de indexación activas para ver un ejemplo.
Hidden Indexes
MongoDB ofrece la capacidad de ocultar o mostrar los índices del planificador de las query. Al ocultar un índice del planificador, puedes evaluar el impacto potencial de eliminar un índice sin realmente eliminarlo.
Si después de la evaluación, el usuario decide descartar el índice, puedes descartar el índice oculto; es decir, no es necesario mostrarlo primero para descartarlo.
Sin embargo, si el impacto es negativo, el usuario puede mostrar el índice en lugar de tener que volver a crear un índice descartado. Y como los índices se mantienen en su totalidad mientras están ocultos, están disponibles de inmediato para su uso una vez que se desocultan.
Para obtener más información sobre los índices ocultos, se puede consultar Índices ocultos.
Ejemplos
Para descartar todos los índices que no sean
_id, especifica"*"para elindex.db.runCommand( { dropIndexes: "collection", index: "*" } ) Para descartar un solo índice, emite el comando especificando el nombre del índice que deseas eliminar. Por ejemplo, para descartar el índice llamado
age_1, utilice el siguiente comando:db.runCommand( { dropIndexes: "collection", index: "age_1" }) mongoshproporciona los métodos asistentedb.collection.dropIndex()ydb.collection.dropIndexes():db.collection.dropIndex("age_1"); Para eliminar varios índices, ejecute el comando especificando una matriz de nombres de índices:
db.runCommand( { dropIndexes: "collection", index: [ "age_1", "age_1_status_1" ] } )