Los índices permiten la ejecución eficiente de queries en MongoDB. Si la aplicación ejecuta las queries repetidamente sobre los mismos campos, se puede crear un índice en esos campos para mejorar el rendimiento de dichas queries.
Para crear un índice, utilice el createIndex() Método de shell o equivalente para su controlador. Esta página muestra ejemplos de MongoDB Shell y sus controladores.
Acerca de esta tarea
Cuando ejecute un comando de creación de índice en el Shell de MongoDB o en un driver, MongoDB solo crea el índice si no existe uno con la misma especificación.
Aunque los índices mejoran el rendimiento de las queries, agregar un índice tiene un impacto negativo en el rendimiento de las operaciones de guardado. Para colecciones con una alta proporción de escritura-lectura, los índices son costosos porque cada inserción y actualización también deben actualizar cualquier índice.
Procedimiento
➤ Para establecer el lenguaje de los ejemplos en esta página, utilice el menú desplegable Seleccione su lenguaje en el panel de navegación derecho.
Para crear un índice en mongosh,db.collection.createIndex() utiliza.
db.collection.createIndex( <key and index type specification>, <options> )
Para crear un índice utilizando el controlador .NET, utilice MongoCollection.CreateIndex.
collection.CreateIndex( IndexKeys<collection>.<key and index type specification>, <options> );
Para crear un índice mediante el driver de Java asíncrono, utilice com.mongodb.async.client.MongoCollection.createIndex.
collection.createIndex( <key and index type specification>, <options>, <callbackFunction>)
Para crear un índice mediante el driver de Java, utilice com.mongodb.client.MongoCollection.createIndex.
collection.createIndex( <key and index type specification>, <options> )å
Para crear un índice mediante el driver de Motor, utilice motor.motor_asyncio.AsyncIOMotorCollection.create_index.
await db.collection.create_index([(<key and index type specification>)], <options> )
Para crear un índice con el Node.js Driver, usa createIndex().
collection.createIndex( { <key and index type specification> }, function(err, result) { console.log(result); callback(result); } )
Para crear un índice mediante el driver de Perl, utilice create_one().
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ <key and index type specification> ] );
Para crear un índice usando el driver PHP, usa MongoDB\\Collection::createIndex().
$collection->createIndex(<key and index type specification>, <options>);
Para crear un índice con el driver de Python, utilice el método pymongo.collection.Colección.create_index :
db.collection.create_index([(<key and index type specification>)], <options> )
Para crear un índice mediante el driver de Ruby, utilice Mongo::Index::View#create_one.
client[:collection].indexes.create_one({ <key and index type specification> }, {options})
Para crear un índice usando el Scala driver, utilice org.mongodb.scala.model.Indexes.
collection.createIndex(<key and index type specification>)
Ejemplo
Este ejemplo crea un índice ascendente de clave única en el campo name:
db.collection.createIndex( { name: 1 } )
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.CreateIndex( IndexKeys<collection>.Ascending("name") );
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.createIndex(Indexes.ascending("name"), someCallbackFunction());
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.createIndex(Indexes.ascending("name"));
Este ejemplo crea un índice ascendente de clave única en el campo name:
await collection.create_index([("name", pymongo.ASCENDING)])
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.createIndex( { name : 1 }, function(err, result) { console.log(result); callback(result); } )
Este ejemplo crea un índice ascendente de clave única en el campo name:
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ name => 1 ] );
Este ejemplo crea un índice ascendente de clave única en el campo name:
$collection->createIndex(['name' => 1]);
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.create_index([("name", pymongo.ASCENDING)])
Este ejemplo crea un índice ascendente de clave única en el campo name:
client[:collection].indexes.create_one({ name: 1 })
Este ejemplo crea un índice ascendente de clave única en el campo name:
collection.createIndex(ascending("name"))
Resultados
Puede usar mongosh para supervisar la creación de su índice.
Para ver qué índices existen en su colección, incluidos los índices que se están compilando actualmente, ejecute el método db.collection.getIndexes():
db.collection.getIndexes()
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { name: -1 }, name: 'name_-1' } ]
Para comprobar si su índice se está compilando, utilice la etapa de agregación $currentOp para obtener información sobre las operaciones activas en su base de datos. Para ejecutar $currentOp en mongosh, utilice el método db.aggregate() en la base de datos admin.
El siguiente pipeline de agregación utiliza la etapa $match para devolver información sobre una operación activa que compila un índice descendente en el campo name:
db.getSiblingDB("admin").aggregate( [ { $currentOp : { idleConnections: true } }, { $match : {"command.createIndexes": { $exists: true } } } ] )
[ { type: 'op', host: 'mongodb.example.net:27017', desc: 'conn584', connectionId: 584, client: '104.30.134.189:12077', appName: 'mongosh 2.3.4', clientMetadata: { ... }, active: true, currentOpTime: '2024-12-05T16:13:35.571+00:00', effectiveUsers: [ { user: jane-doe, db: 'admin' } ], isFromUserConnection: true, threaded: true, opid: ..., lsid: { ... }, secs_running: Long('3'), microsecs_running: Long('3920881'), op: 'command', ns: 'example_db.collection', redacted: false, command: { createIndexes: 'collection', indexes: [ { name: 'name_-1', key: { name: -1 } } ], apiVersion: '1', lsid: { id: UUID('570931be-c692-4963-b9e2-1e279efd9702') }, '$clusterTime': { clusterTime: Timestamp({ t: 1733415063, i: 32 }), signature: { hash: Binary.createFromBase64('z0zaUHJ5SfhNQyvQLhocsKRFNbo=', 0), keyId: Long('7444956895695077380') } }, '$db': 'example_db' }, numYields: 0, queues: { ... }, currentQueue: null, locks: {}, waitingForLock: false, lockStats: { ... }, waitingForFlowControl: false, flowControlStats: { acquireCount: Long('3') } }, ... ]
MongoDB marca las creaciones de índices en varias etapas, incluida la espera del quórum de confirmación, como una conexión inactiva al establecer el campo active en false. La configuración idleConnections: true incluye estas conexiones inactivas en la salida $currentOp.
Para ver información sobre los índices existentes mediante un driver, consulte la documentación de su driver.
Obtén más información
Para aprender a crear índices en MongoDB Compass, consulte Gestionar índices en la documentación de Compass.
Para ver con qué frecuencia se utilizan tus índices, consulta Medir el uso de los índices.
Para aprender cómo especificar el nombre del índice, se debe consultar Especificar el nombre de un índice.
Para aprender cómo MongoDB construye índices, consulte el proceso de creación de índices.