Esta página muestra cómo gestionar los índices existentes. Para obtener instrucciones sobre cómo crear índices, consulte las páginas del tipo de índice específico.
Ver los índices existentes
Las siguientes secciones proporcionan métodos para visualizar índices existentes en una colección o en una base de datos completa.
Lista todos los índices de una colección
Para devolver una lista de todos los índices en una colección, use el
db.collection.getIndexes() método o similar
un método para su driver.
Por ejemplo, para ver todos los índices de la colección people, ejecuta el siguiente comando:
db.people.getIndexes()
Listar todos los índices de una base de datos
Para enumerar todos los índices de colección en una base de datos, ejecute el siguiente comando mongosh en:
db.getCollectionNames().forEach(function(collection) { indexes = db[collection].getIndexes(); print("Indexes for " + collection + ":"); printjson(indexes); });
Lista de tipos específicos de índices
Para listar todos los índices de un cierto tipo (como encriptada o text) para todas las colecciones en toda la base de datos, ejecuta el siguiente comando en mongosh:
// The following finds all hashed indexes db.adminCommand("listDatabases").databases.forEach(function(d){ let mdb = db.getSiblingDB(d.name); mdb.getCollectionInfos({ type: "collection" }).forEach(function(c){ let currentCollection = mdb.getCollection(c.name); currentCollection.getIndexes().forEach(function(idx){ let idxValues = Object.values(Object.assign({}, idx.key)); if (idxValues.includes("hashed")) { print("Hashed index: " + idx.name + " on " + d.name + "." + c.name); printjson(idx); }; }); }); });
Para ver una lista de todos los índices en una colección en MongoDB Compass, haz clic en la colección objetivo en el panel izquierdo y selecciona la Indexes tab.

Para más detalles sobre la información mostrada en esta pestaña, consulte la documentación de Compass.
Remueva índices
Tip
Ocultar un Índice Antes de Eliminarlo
Si descartas un índice que se utiliza activamente en producción, es posible que tu aplicación sufra una degradación del rendimiento. Antes de descartar un índice, puede evaluar el impacto potencial del descarte ocultando el índice.
Los índices ocultos no se utilizan para respaldar consultas. Si ocultas un índice y notas un impacto negativo sustancial en el rendimiento, considera conservar y mostrar el índice para que las consultas puedan reanudar su uso.
Para **aprender** cómo **remover** un índice existente, consulte **Descartar** un **índice**.
Para aprender cómo remover un índice en MongoDB Compass, consulte Administrar índices en Compass.
Modificar un índice
Para modificar un índice existente en el MongoDB Shell, necesitas descartar y volver a crear el índice. La excepción a esta regla son los índices TTL, que pueden modificarse mediante el comando collMod en conjunto con el distintivo de colección index.
Para modificar un índice existente en MongoDB Compass, debes descartar y recrear el índice.
Minimizar el impacto en el rendimiento con un índice temporal
Si descartas un índice que se utiliza activamente en producción, tu aplicación puede experimentar una degradación del rendimiento. Para garantizar que las consultas puedan seguir utilizando un índice durante la modificación, puedes crear un índice redundante temporal que contenga los mismos campos que el índice modificado.
Ejemplo
Este ejemplo crea un nuevo índice y lo modifica para hacerlo único.
Crea un índice temporal que contenga el campo url
Ejecuta este comando:
db.siteAnalytics.createIndex( { "url": 1, "dummyField": 1 } )
El comando devuelve el nombre del índice:
url_1_dummyField_1
Este índice temporal te permite descartar con seguridad el índice original { "url":
1 } sin afectar el rendimiento.
Vuelve a crear el índice { "url": 1 } con la propiedad unique
Ejecuta este comando:
db.siteAnalytics.createIndex( { "url": 1 }, { "unique": true } )
El comando devuelve el nombre del índice:
url_1
El índice url_1 se recrea y puedes descartar el índice temporal sin afectar el rendimiento. Las consultas en el campo url pueden utilizar el nuevo índice único.
Confirmar que el índice fue actualizado
Para visualizar los índices en la colección siteAnalytics, ejecute este comando:
db.siteAnalytics.getIndexes()
El comando devuelve estos índices, indicando que el índice url_1 es ahora único:
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { url: 1 }, name: 'url_1', unique: true } ]
Buscar índices inconsistentes entre particiones
Una colección particionada tiene un índice inconsistente si la colección no tiene exactamente los mismos índices (incluidas las opciones de índice) en cada partición que contiene fragmentos de la colección. Aunque no deberían ocurrir índices inconsistentes durante las operaciones normales, pueden ocurrir índices inconsistentes, como por ejemplo:
Cuando un usuario está creando un índice con una restricción de clave
uniquey una partición contiene un fragmento con documentos duplicados. En tales casos, la operación de creación de índice puede tener éxito en las particiones sin duplicados, pero no en la partición con duplicados.Cuando un usuario está compilando un índice en las particiones de forma continua (es decir, compilando manualmente el índice uno por uno en las particiones), pero no logra compilar el índice para una partición asociado o compila incorrectamente un índice con una especificación diferente.
Por defecto, el servidor de configuración primario verifica la falta de coherencia de los índices entre las particiones para las colecciones particionadas. El comando serverStatus, cuando se ejecuta en el primario del servidor de configuración, devuelve el campo shardedIndexConsistency para informar sobre el número de colecciones particionadas con inconsistencias en los índices.
Si shardedIndexConsistency informa de alguna inconsistencia en el índice, puedes ejecutar el comando checkMetadataConsistency con checkIndexes: true para tus colecciones particionadas y encontrar las inconsistencias.
Ejecute el comando
checkMetadataConsistency:db.runCommand( { checkMetadataConsistency: 1, checkIndexes: true } ) Si la colección tiene índices inconsistentes, el comando
checkMetadataConsistencydevuelve detalles sobre los índices inconsistentes similares a los siguientes:{ cursor: { id: Long('0'), ns: 'test.$cmd.aggregate', firstBatch: [ { type: 'InconsistentIndex', description: 'Found an index of a sharded collection that is inconsistent between different shards', details: { namespace: 'test.reviews', info: { missingFromShards: [], inconsistentProperties: [ { k: 'expireAfterSeconds', v: Long('600') }, { k: 'expireAfterSeconds', v: 3600 } ], indexName: 'reviewDt_1' } } }, { type: 'InconsistentIndex', description: 'Found an index of a sharded collection that is inconsistent between different shards', details: { namespace: 'test.reviews', info: { missingFromShards: [ 'shard02' ], inconsistentProperties: [], indexName: 'page_1_score_1' } } } ] }, ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1752574769, i: 1 }), signature: { hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0), keyId: Long('0') } }, operationTime: Timestamp({ t: 1752574760, i: 1 }) } La salida indica dos inconsistencias para la colección fragmentada
test.reviews:Un índice denominado
reviewDt_1tiene propiedades inconsistentes entre las particiones de la colección; específicamente, las propiedadesexpireAfterSecondsdifieren.Falta un índice llamado
page_1_score_1en la colección enshard02.
- Para resolver la inconsistencia donde falta un índice de la colección en un fragmento en particular,
Puedes:
Emita una creación de índices
db.collection.createIndex()desde unamongosinstancia. La operación solo compila el índice de la colección en la partición o particiones que les falta el índice.-O-
Realiza una creación de índices progresiva para la colección en la(s) partición(es) afectada(s).
Nota
Los índices continuos pueden afectar negativamente a su proceso de implementación. Para obtener información sobre cuándo usar esta creación de índices, consulta Construcciones de índice continuas.
Advertencia
Evita realizar procesos de creación de índices en modo continuo y replicado al mismo tiempo, ya que podría generar problemas inesperados, como compilaciones fallidas y bucles de fallos.
- Para resolver dónde difieren las propiedades del índice entre las particiones,
Elimine el índice incorrecto de la colección en los fragmentos afectados y reconstruya el índice. Para ello, puede:
Emita una creación de índices
db.collection.createIndex()desde unamongosinstancia. La operación solo compila el índice de la colección en la partición o particiones que les falta el índice.-O-
Realiza una creación de índices continua para la colección en la partición afectada.
Nota
Los índices continuos pueden afectar negativamente a su proceso de implementación. Para obtener información sobre cuándo usar esta creación de índices, consulta Construcciones de índice continuas.
Alternativamente, si la inconsistencia es la propiedad
expireAfterSeconds, puede ejecutar el comandocollModpara actualizar el número de segundos en lugar de eliminar y volver a crear el índice.