Índices compostos
Nesta página
Visão geral
Os índices compostos contêm referências a vários campos dentro dos documentos de uma collection, melhorando o desempenho de query e classificação.
Ao criar um índice composto, você deve especificar os seguintes detalhes:
Os campos nos quais criar o índice
A ordem de classificação para cada campo (crescente ou decrescente)
Dados de amostra
Os exemplos deste guia usam a movies
coleção no sample_mflix
banco de dados dos conjuntos de dados de amostra do Atlas . Para acessar essa coleção a partir do seu aplicação Scala, crie um MongoClient
que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database
collection
e:
val database: MongoDatabase = mongoClient.getDatabase("sample_mflix") val collection: MongoCollection[Document] = database.getCollection("movies")
Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Criar um índice composto
Para executar os exemplos deste guia, inclua as seguintes declarações de importação em seu arquivo:
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
Utilize o método createIndex()
para criar um índice composto. O exemplo a seguir cria um índice em ordem decrescente no campo runtime
e em ordem crescente no 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))
Você pode verificar se o índice foi criado usando o método listIndexes()
. Você deve ver um índice para runtime
e year
na lista, conforme mostrado na seguinte saída:
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"}
O seguinte é um exemplo de uma consulta coberta pelo índice criado nos campos runtime
e 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,...}
Informações adicionais
Para saber mais sobre índices compostos, consulte Índices compostos no manual do MongoDB Server .
Para ver exemplos executáveis que demonstram como gerenciar índices, consulte Otimizar queries usando índices.
Documentação da API
Para saber mais sobre qualquer um dos métodos discutidos nesta guia, consulte a seguinte documentação da API: