Puedes crear un índice en un campo que contenga un valor de arreglo para mejorar el rendimiento de las queries en ese campo. Cuando creas un índice en un campo que contiene un valor de arreglo, MongoDB almacena ese índice como un índice multi clave.
Para crear un índice, utilice el db.collection.createIndex()
método. Tu operación debería asemejarse a este prototipo:
db.<collection>.createIndex( { <field>: <sortOrder> } )
Acerca de esta tarea
El ejemplo de esta página utiliza una colección students que contiene estos documentos:
db.students.insertMany( [ { "name": "Andre Robinson", "test_scores": [ 88, 97 ] }, { "name": "Wei Zhang", "test_scores": [ 62, 73 ] }, { "name": "Jacob Meyer", "test_scores": [ 92, 89 ] } ] )
Ejecutas regularmente una query que devuelve estudiantes con al menos un test_score mayor que 90. Puede crear un índice en el campo test_scores para mejorar el rendimiento de esta query.
Procedimiento
La siguiente operación crea un índice multiclave ascendente en el campo test_scores de la colección students:
db.students.createIndex( { test_scores: 1 } )
Debido a que test_scores contiene un valor de arreglo, MongoDB almacena este índice como un índice multiclave.
Resultados
El índice contiene una clave para cada valor individual que aparece en el campo test_scores. El índice es ascendente, lo que significa que las claves se almacenan en este orden: [ 62, 73, 88, 89, 92, 97 ].
El índice soporta consultas que seleccionan en el campo test_scores. Por ejemplo, la siguiente query devuelve documentos donde al menos un elemento en el arreglo test_scores es mayor que 90:
db.students.find( { test_scores: { $elemMatch: { $gt: 90 } } } )
Salida:
[ { _id: ObjectId("632240a20646eaee87a56a80"), name: 'Andre Robinson', test_scores: [ 88, 97 ] }, { _id: ObjectId("632240a20646eaee87a56a82"), name: 'Jacob Meyer', test_scores: [ 92, 89 ] } ]
Obtén más información
Para aprender a crear un índice multikey en campos de documentos incrustados, consulta Crear un índice en un campo incrustado en un arreglo.
Para aprender sobre los límites de los índices multiclave, consulta Límites del índice multiclave.