Esta página muestra cómo administrar los índices existentes. Para obtener instrucciones sobre cómo crear índices, consulte las páginas específicas de cada tipo de índice.
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 de una colección, utilice el
db.collection.getIndexes() método o similar
método para su conductor.
Por ejemplo, para ver todos los índices de la colección people, ejecute 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 enumerar todos los índices de un tipo determinado (como hash o texto) para todas las colecciones en todas las bases de datos, ejecute el siguiente comando mongosh en:
// 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 de una colección en MongoDB Compass, haga clic en la colección de destino en el panel izquierdo y seleccione el Indexes tab.

Para más detalles sobre la información mostrada en esta pestaña, consulte la documentación de Compass.
Eliminar índices
Tip
Ocultar un índice antes de eliminarlo
Si elimina un índice que se usa activamente en producción, su aplicación podría sufrir una degradación del rendimiento. Antes de eliminar un índice, puede evaluar el posible impacto ocultándolo.
Los índices ocultos no se utilizan para admitir consultas. Si oculta un índice y observa un impacto negativo considerable en el rendimiento, considere conservarlo y mostrarlo para que las consultas puedan reanudarlo.
Para saber cómo eliminar un índice existente, consulte Eliminar un índice.
Para saber cómo eliminar un índice en MongoDB Compass, consulte Administrar índices en Compass.
Modificar un índice
Para modificar un índice existente en MongoDB Compass, debe eliminar y volver a crear el índice.
Minimizar el impacto en el rendimiento con un índice temporal
Si elimina un índice que se usa activamente en producción, su aplicación podría sufrir una degradación del rendimiento. Para garantizar que las consultas puedan seguir usando un índice durante la modificación, puede crear un índice temporal y redundante 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 url campo
Ejecute este comando:
db.siteAnalytics.createIndex( { "url": 1, "dummyField": 1 } )
El comando devuelve el nombre del índice:
url_1_dummyField_1
Este índice temporal le permite eliminar de forma segura el índice { "url":
1 } original sin afectar el rendimiento.
Recrear el { "url": 1 } índice con la unique propiedad
Ejecute este comando:
db.siteAnalytics.createIndex( { "url": 1 }, { "unique": true } )
El comando devuelve el nombre del índice:
url_1
El índice url_1 se vuelve a crear y puede eliminar el índice temporal sin afectar el rendimiento. Las consultas en el campo url pueden usar el nuevo índice único.
Confirmar que el índice fue actualizado
Para ver los índices de la colección siteAnalytics, ejecute este comando:
db.siteAnalytics.getIndexes()
El comando devuelve estos índices, lo que indica que el índice url_1 ahora es único:
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { url: 1 }, name: 'url_1', unique: true } ]
Encontrar índices inconsistentes entre fragmentos
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.
De manera predeterminada, el servidor de configuración principal verifica si hay inconsistencias de índice en los fragmentos para las colecciones fragmentadas, y el serverStatus comando, cuando se ejecuta en el servidor de configuración principal, devuelve el campo shardedIndexConsistency para informar la cantidad de colecciones fragmentadas con inconsistencias de índice.
Si informa alguna inconsistencia en shardedIndexConsistency checkMetadataConsistency el checkIndexes: true índice, puede ejecutar el comando con para sus colecciones fragmentadas para 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:
Ejecute una compilación de índice
db.collection.createIndex()desde una instancia. La operación solo compila el índice de la colección en los fragmentos que no lomongostienen.-O-
Realice una compilación de índice móvil para la colección en los fragmentos afectados.
Nota
Los índices rotativos pueden afectar negativamente a la implementación. Para obtener información sobre cuándo usar esta compilación de índice, consulte Compilaciones de índices rotativos.
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 los fragmentos,
Elimine el índice incorrecto de la colección en los fragmentos afectados y reconstruya el índice. Para ello, puede:
Ejecute una compilación de índice
db.collection.createIndex()desde una instancia. La operación solo compila el índice de la colección en los fragmentos que no lomongostienen.-O-
Realice una compilación de índice móvil para la colección en el fragmento afectado.
Nota
Los índices rotativos pueden afectar negativamente a la implementación. Para obtener información sobre cuándo usar esta compilación de índice, consulte Compilaciones de índices rotativos.
Alternativamente, si la inconsistencia es la
expireAfterSecondspropiedad, puede ejecutar el comando para actualizar la cantidad de segundos en lugar de eliminar y reconstruir elcollModíndice.