Crie índices
Nesta página
Índices oferecem suporte à execução eficiente de queries no MongoDB. Para criar um índice em um campo ou campos, passe um documento de especificação de índice para o método MongoCollection.createIndex()
.
O driver Java Reactive Streams fornece a classe Indexes
que inclui métodos de fábrica estáticos para criar documentos de especificação de índice para os vários tipos de chave de índice do MongoDB. Para saber mais sobre os tipos de índice, consulteÍndices no manual do servidor MongoDB.
Observação
O MongoDB só cria um índice se um índice da mesma especificação ainda não existir.
Pré-requisitos
Você deve incluir as seguintes declarações de importação em seu programa para executar os exemplos de código neste guia:
import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.reactivestreams.client.MongoCollection; import org.bson.Document; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Filters;
Importante
Este guia usa as implementações do Subscriber
, que são descritas noPrimário de início rápidodo .
Conecte-se a um MongoDB deployment
Primeiro, conecte a um MongoDB deployment e, em seguida, declare e defina as instâncias MongoDatabase
e MongoCollection
.
O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost
na porta 27017
. Em seguida, define a variável database
para fazer referência ao banco de dados test
e a variável collection
para fazer referência à coleção restaurants
:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o tutorial Conectar ao MongoDB .
Índice Ascendente
Para criar uma especificação para um índice ascendente, use o método de assistente estática Indexes.ascending()
.
Índice Ascendente Único
O exemplo seguinte cria um índice ascendente no campo name
:
collection.createIndex(Indexes.ascending("name")) .subscribe(new PrintToStringSubscriber<String>());
Índice Ascendente Composto
O exemplo seguinte cria um índice composto ascendente no campo stars
e no campo name
:
collection.createIndex(Indexes.ascending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
Para visualizar uma forma alternativa de criar um índice composto, consulte a seção Índices compostos .
Índice decrescente
Para criar uma especificação de um índice descendente, use o método assistente estático Indexes.descending()
.
Índice de chave descendente única
O exemplo seguinte cria um índice descendente no campo stars
:
collection.createIndex(Indexes.descending("stars")) .subscribe(new PrintToStringSubscriber<String>());
Índice de chave descendente composta
O exemplo seguinte cria um índice composto descendente no campo stars
e no campo name
:
collection.createIndex(Indexes.descending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
Para visualizar uma forma alternativa de criar um índice composto, consulte a seção Índices compostos .
Índices compostos
Para criar uma especificação para um índice composto, use o método de ajuda estática Indexes.compoundIndex()
.
Observação
Para criar uma especificação para um índice composto onde todas as chaves são ascendentes, você pode utilizar o método ascending()
. Para criar uma especificação para um índice composto onde todas as chaves são descendentes, você pode utilizar o método descending()
.
O exemplo seguinte cria um índice composto no campo stars
em ordem decrescente e no campo name
em ordem crescente:
collection.createIndex( Indexes.compoundIndex(Indexes.descending("stars"), Indexes.ascending("name")) ).subscribe(new PrintToStringSubscriber<String>());
Text Indexes
MongoDB fornece índices de texto para dar suporte ao texto Atlas Search de conteúdo de string . Os índices de texto podem incluir qualquer campo cujo valor seja uma string ou uma array de elementos da string. Para criar uma especificação para um índice de texto, use o método auxiliar estático Indexes.text()
.
O exemplo seguinte cria um índice de texto no campo name
:
collection.createIndex(Indexes.text("name")) .subscribe(new PrintToStringSubscriber<String>());
Índice com hash
Para criar uma especificação para um índice de índice com hash, use o método de ajuda estática Indexes.hashed()
.
O exemplo seguinte cria um índice com hash no campo _id
:
collection.createIndex(Indexes.hashed("_id")) .subscribe(new PrintToStringSubscriber<String>());
Índices geoespaciais
Para suportar queries geoespaciais, MongoDB suporta vários índices geoespaciais.
2dsphere
Para criar uma especificação para um índice 2dsphere
, use o método auxiliar estático Indexes.geo2dsphere()
.
O seguinte exemplo cria um índice 2dsphere
no campo contact.location
:
collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintToStringSubscriber<String>());
IndexOptions
Além do documento de especificação do índice, o método createIndex()
pode usar um documento de opções de índice, que direciona o driver a criar índices únicos ou índices parciais.
O driver fornece a classe IndexOptions
para especificar várias opções de índice.
Adicione a seguinte declaração de importação ao seu código para criar uma instância do IndexOptions
.
import com.mongodb.client.model.IndexOptions;
índice único
O seguinte código especifica a opção unique(true)
para criar um índice único nos campos name
e stars
:
IndexOptions indexOptions = new IndexOptions().unique(true); collection.createIndex(Indexes.ascending("name", "stars"), indexOptions) .subscribe(new PrintToStringSubscriber<String>());
Índice parcial
Para criar um índice parcial, inclua a opção de índice partialFilterExpression
.
O exemplo a seguir cria um índice parcial em documentos nos quais o valor do campo status
é "A"
.
IndexOptions partialFilterIndexOptions = new IndexOptions() .partialFilterExpression(Filters.exists("contact.email")); collection.createIndex( Indexes.descending("name", "stars"), partialFilterIndexOptions) .subscribe(new PrintToStringSubscriber<String>());
Obter uma lista de índices em uma collection
Use o método listIndexes()
para obter uma lista de índices. O seguinte código lista os índices na coleção:
collection.listIndexes().subscribe(new PrintDocumentSubscriber());
Para saber mais sobre outras opções de índice, consulte Propriedades do índice no manual do servidor.