Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/

Crie índices

Nesta página

  • Pré-requisitos
  • Conecte-se a um MongoDB deployment
  • Índice Ascendente
  • Índice decrescente
  • Índices compostos
  • Text Indexes
  • Índice com hash
  • Índices geoespaciais
  • IndexOptions
  • Obter uma lista de índices em uma collection

Í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.

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 .

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 .

Para criar uma especificação para um índice ascendente, use o método de assistente estática Indexes.ascending() .

O exemplo seguinte cria um índice ascendente no campo name :

collection.createIndex(Indexes.ascending("name"))
.subscribe(new PrintToStringSubscriber<String>());

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 .

Para criar uma especificação de um índice descendente, use o método assistente estático Indexes.descending() .

O exemplo seguinte cria um índice descendente no campo stars :

collection.createIndex(Indexes.descending("stars"))
.subscribe(new PrintToStringSubscriber<String>());

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 .

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>());

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>());

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>());

Para suportar queries geoespaciais, MongoDB suporta vários índices geoespaciais.

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>());

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;

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>());

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>());

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.

Voltar

Bancos de dados e coleções