Overview
Los índices compuestos contienen referencias a múltiples campos dentro de los documentos de una colección, mejorando el rendimiento de las consultas y la clasificación.
Al crear un índice compuesto, debe especificar los siguientes detalles:
Los campos sobre los que crear el índice
El orden de clasificación para cada campo (ascendente o descendente)
Datos de muestra
Los ejemplos de esta guía utilizan el movies colección en la base de datos sample_mflix de la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación Scala, crea un MongoClient que se conecte a un clúster de Atlas y asigna los siguientes valores a tus variables database y collection:
val database: MongoDatabase = mongoClient.getDatabase("sample_mflix") val collection: MongoCollection[Document] = database.getCollection("movies")
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.
Crear un índice compuesto
Para ejecutar los ejemplos en esta guía, debes incluir las siguientes instrucciones de importación en tu archivo:
import org.mongodb.scala._ import org.mongodb.scala.model.Indexes import org.mongodb.scala.model.IndexOptions._ import org.mongodb.scala.model.Filters._ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.{Failure, Success} import java.util.concurrent.TimeUnit
Utilice el método createIndex() para crear un índice compuesto. El siguiente ejemplo crea un índice en orden descendente en el campo runtime y en orden ascendente en el campo year:
val index = Indexes.compoundIndex(Indexes.descending("runtime"), Indexes.ascending("year")) val observable = collection.createIndex(index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
Puedes verificar que el índice fue creado utilizando el método listIndexes(). Debería ver un índice para runtime y year en la lista, como se muestra en la siguiente salida:
collection.listIndexes().subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"v": 2, "key": {"runtime": -1, "year": 1}, "name": "runtime_-1_year_1"}
A continuación se muestra un ejemplo de una query que está cubierta por el índice creado en los campos runtime y year:
val filter = and(gt("runtime", 80), gt("year", 1999)) collection.find(filter).first().subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id":...,"runtime": 98,...,"title": "In the Mood for Love",...,"year": 2000,...}
Información Adicional
Para saber más sobre los índices compuestos, consulta Índices Compuestos en el manual del MongoDB Server.
Para ver ejemplos ejecutables que demuestran cómo administrar los índices, consulte Optimizar las Consultas Utilizando Índices.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos mencionados en esta guía, consulta la siguiente documentación de la API: