Los índices compuestos son índices que contienen referencias a múltiples campos. Mejoran el rendimiento de las consultas sobre exactamente los campos del índice o los campos del... index prefix.
Para crear un índice compuesto, utilice el
db.collection.createIndex() :
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
Restricción
Puedes especificar hasta 32 campos en un único índice compuesto.
Antes de comenzar
Crea una colección students que contenga estos documentos:
db.students.insertMany([ { "name": "Alice", "gpa": 3.6, "location": { city: "Sacramento", state: "California" } }, { "name": "Bob", "gpa": 3.2, "location": { city: "Albany", state: "New York" } } ])
Procedimiento
La siguiente operación crea un índice compuesto que contiene los campos name y gpa:
db.students.createIndex( { name: 1, gpa: -1 } )
En este ejemplo:
El índice en
namees ascendente (1).El índice en
gpaes descendente (-1).
Resultados
El índice creado admite queries que seleccionan en:
Ambos campos
nameygpa.Solo el campo
name, porquenamees un prefijo del índice compuesto.
Por ejemplo, el índice admite estos queries:
db.students.find( { name: "Alice", gpa: 3.6 } ) db.students.find( { name: "Bob" } )
El índice no admite queries solo sobre el campo gpa, porque gpa no forma parte del prefijo del índice. Por ejemplo, el índice no admite este query:
db.students.find( { gpa: { $gt: 3.5 } } )
Obtén más información
Para aprender cómo crear índices compuestos eficientes, consulte la guía ESR (Igualdad, Ordenación, Rango).
Para aprender cómo el orden de ordenación (ascendente o descendente) impacta en el rendimiento de los índices compuestos, consulta Utiliza índices para ordenar los resultados de los queries.
Para aprender sobre otros tipos de índice, consulta Tipos de índices.
Para aprender qué propiedades puedes especificar para los índices, consulta Propiedades del índice.