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

Início rápido

Nesta página

  • Pré-requisitos
  • Faça uma conexão
  • Conecte-se a uma única MongoDB deployment
  • Acessar um banco de dados
  • Acessar uma coleção
  • Criar um documento
  • Insira um documento
  • Inserir um documento
  • Insira vários documentos
  • Contagem de documentos em uma coleção
  • Consulte a coleção
  • Encontre o primeiro documento em uma coleção
  • Encontre todos os documentos em uma coleção
  • Especificar um filtro de query
  • Obtenha um único documento que corresponda a um filtro
  • Obter todos os documentos que correspondem a um filtro
  • Atualize documentos
  • Atualizar um único documento
  • Atualizar vários documentos
  • Exclua documentos
  • Excluir um único documento que corresponda a um filtro
  • Excluir todos os documentos que correspondem a um filtro
  • Crie índices
  • Informações adicionais

Os exemplos de código neste guia vêm do QuickTour.java no Github repositório do do código fonte do driver.

Observação

Para obter instruções sobre como instalar o driver Java Reactive Streams, consulte oguia de instalação .

Importante

Este guia usa as implementações do Subscriber , que são descritas no Quick Start Primary.

Você deve configurar os seguintes componentes para executar os exemplos de código neste guia:

  • Servidor MongoDB em execução na porta padrão para o MongoDB (27017)

  • Dependência do driver instalada em seu projeto

  • As seguintes declarações de importação:

    import com.mongodb.bulk.BulkWriteResult;
    import com.mongodb.client.model.BulkWriteOptions;
    import com.mongodb.client.model.DeleteOneModel;
    import com.mongodb.client.model.InsertOneModel;
    import com.mongodb.client.model.ReplaceOneModel;
    import com.mongodb.client.model.UpdateOneModel;
    import com.mongodb.client.model.WriteModel;
    import com.mongodb.client.result.InsertOneResult;
    import com.mongodb.client.result.InsertManyResult;
    import com.mongodb.client.result.DeleteResult;
    import com.mongodb.client.result.UpdateResult;
    import com.mongodb.reactivestreams.client.MongoClient;
    import com.mongodb.reactivestreams.client.MongoClients;
    import com.mongodb.reactivestreams.client.MongoCollection;
    import com.mongodb.reactivestreams.client.MongoDatabase;
    import org.bson.Document;
    import java.util.ArrayList;
    import java.util.List;
    import static com.mongodb.client.model.Accumulators.*;
    import static com.mongodb.client.model.Aggregates.*;
    import static com.mongodb.client.model.Filters.*;
    import static com.mongodb.client.model.Projections.*;
    import static com.mongodb.client.model.Sorts.*;
    import static com.mongodb.client.model.Updates.*;
    import static java.util.Arrays.asList;
    import static java.util.Collections.singletonList;

Use o método MongoClients.create() para fazer uma conexão com uma MongoDB deployment em execução.

A instância MongoClient representa um pool de conexões com o banco de dados. Você precisa de apenas uma instância de MongoClient , mesmo ao usar threads de operação simultâneas.

Importante

Normalmente, você cria apenas uma instância do MongoClient para uma determinada implantação do MongoDB, como uma implantação independente, um conjunto de réplicas ou um cluster fragmentado, e usa o cliente em seu aplicativo. No entanto, se você criar várias instâncias, tenha em mente o seguinte:

  • Todos os limites de uso de recursos (por exemplo, conexões máximas) se aplicam a cada instância do MongoClient .

  • Para descartar uma instância, chame o método MongoClient.close() para limpar recursos.

O exemplo a seguir mostra várias maneiras de se conectar a uma única implantação do MongoDB.

Você pode se conectar a um único MongoDB deployment das seguintes maneiras:

  • Instancie um objeto MongoClient sem nenhum parâmetro para se conectar a um servidor MongoDB em execução no localhost na porta 27017:

    MongoClient mongoClient = MongoClients.create();
  • Especifique explicitamente o hostname para se conectar a uma instância do MongoDB em execução no host especificado na porta 27017:

    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyToClusterSettings(builder ->
    builder.hosts(Arrays.asList(new ServerAddress("hostOne"))))
    .build());
  • Especifique explicitamente o hostname e o port:

    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyToClusterSettings(builder ->
    builder.hosts(Arrays.asList(new ServerAddress("hostOne", 27018))))
    .build());
  • Especifique o ConnectionString:

    MongoClient mongoClient = MongoClients.create("mongodb://hostOne:27017");

Após conectar uma instância do MongoClient a um MongoDB deployment, utilize o método MongoClient.getDatabase() para acessar um banco de dados.

Especifique o nome do banco de dados para o método getDatabase() . Se um banco de dados não existir, o MongoDB criará o banco de dados quando você armazenar os dados pela primeira vez para esse banco de dados.

O exemplo a seguir acessa o banco de dados do mydb :

MongoDatabase database = mongoClient.getDatabase("mydb");

MongoDatabase as instâncias são imutáveis.

Depois de ter uma instância MongoDatabase , use o método getCollection()` para acessar uma coleção.

Especifique o nome da coleção para o método getCollection() . Se uma coleção não existir, o MongoDB criará a coleção quando você armazenar os dados pela primeira vez para essa coleção.

Por exemplo, usando a instância do banco de dados de dados, a seguinte declaração acessa a coleção chamada test no banco de banco de dados mydb :

MongoCollection<Document> collection = database.getCollection("test");

MongoCollection as instâncias são imutáveis.

Para criar o documento usando o driver, use a classe Document .

Por exemplo, considere o seguinte JSON document:

{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"versions": [ "v3.2", "v3.0", "v2.6" ],
"info" : { x : 203, y : 102 }
}

Para criar o documento usando o driver, instancie um objeto Document com um campo e valor e use seu método append() para incluir campos e valores adicionais no objeto de documento. O valor pode ser outro objeto Document para especificar um documento incorporado:

Document doc = new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
.append("info", new Document("x", 203).append("y", 102));

Observação

O tipo BSON de uma array corresponde ao tipo Java java.util.List. Para obter uma lista dos BSON types e os tipos correspondentes em Java, consulte o mapeamento Document.

Depois de ter o objeto MongoCollection , você pode inserir documentos na coleção.

Para inserir um único documento em uma coleção, você pode usar o método insertOne() .

var subscriber = new OperationSubscriber<InsertOneResult>();
collection.insertOne(doc).subscribe(subscriber);
// Wait for the insertOne operation to complete
subscriber.await();

Observação

Se nenhum campo _id de nível superior for especificado no documento, o MongoDB gerará automaticamente um valor e adicionará esse campo ao documento inserido.

Importante

Na API, todos os métodos que retornam uma instância Publisher são fluxos frios, o que significa que nada acontece até que eles sejam inscritos.

Por exemplo, o exemplo abaixo não faz nada:

Publisher<InsertOneResult> publisher = collection.insertOne(doc);

A operação acontece somente quando um Publisher é inscrito e os dados são solicitados.

publisher.subscribe(new Subscriber<InsertOneResult>() {
@Override
public void onSubscribe(final Subscription s) {
s.request(1); // <--- Data requested and the insertion will now occur
}
@Override
public void onNext(final InsertOneResult result) {
System.out.println("Inserted: " + result);
}
@Override
public void onError(final Throwable t) {
System.out.println("Failed");
}
@Override
public void onComplete() {
System.out.println("Completed");
}
});

Após o documento ser inserido, o método onNext() é chamado e imprime Inserted: seguido do resultado. Finalmente, o método onComplete() imprime Completed. Se houver um erro por qualquer motivo, o método onError() imprimirá Failed.

Para inserir vários documentos, você pode usar o método insertMany() da coleção, que recebe uma lista de documentos a serem inseridos.

O exemplo a seguir adiciona vários documentos no seguinte formato:

{ "i" : value }

Crie os documentos em um loop e adicione-os à lista documents :

List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}

Para inserir estes documentos na coleção, passe a lista de documentos para o método insertMany() :

var subscriber = new OperationSubscriber<InsertManyResult>();
collection.insertMany(documents).subscribe(subscriber);
// Wait for the insertMany operation to complete
subscriber.await();

O exemplo anterior bloqueia no Publisher para terminar. Isso garante que os dados estejam no banco de banco de dados antes da execução da próxima operação.

Para contar o número de documentos em uma collection, você pode usar o método countDocuments() da collection. O código a seguir deve imprimir 101, descrevendo os 100 documentos inseridos usando insertMany() e o 1 inserido usando insertOne().

collection.count()
.subscribe(new PrintSubscriber<Long>("total # of documents: %s"));

Para fazer query da coleção, você pode usar o método find() da coleção. Você pode chamar o método sem argumentos para consultar todos os documentos em uma coleção ou passar um filtro para consultar documentos que correspondam aos critérios do filtro.

Para retornar o primeiro documento da coleção, use o método find() sem nenhum parâmetro e encadeie o método first() .

Dica

A construção find().first() é útil para queries que devem corresponder apenas a um único documento ou se você estiver interessado apenas no primeiro documento correspondente.

O exemplo a seguir imprime o primeiro documento encontrado na coleção:

collection.find().first().subscribe(new PrintDocumentSubscriber());

O exemplo deve imprimir o seguinte documento:

{
"_id" : { "$oid" : "551582c558c7b4fbacf16735" },
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : { "x" : 203, "y" : 102 }
}

Observação

O elemento _id foi adicionado automaticamente pelo MongoDB ao seu documento e seu valor será diferente do mostrado. O MongoDB reserva os nomes de campo que começam com _ e $ para uso interno.

Para recuperar todos os documentos na coleção, use o método find() . O método find() retorna uma instância do FindPublisher que fornece uma interface fluente para encadear ou controlar operações de localização. O seguinte código recupera e imprime todos os documentos na coleção:

collection.find().subscribe(new PrintDocumentSubscriber());

Para fazer query de documentos que correspondam a determinadas condições, passe um objeto de filtro para o método find() . Para facilitar a criação de objetos de filtro, o driver fornece métodos assistente Filters .

Para localizar o primeiro documento no qual o campo i tem o valor 71, passe uma definição de filtro eq() para especificar a condição de igualdade:

collection.find(eq("i", 71)).first().subscribe(new PrintDocumentSubscriber());

O exemplo imprime um documento:

{ "_id" : { "$oid" : "5515836e58c7b4fbc756320b" }, "i" : 71 }

O exemplo a seguir retorna e imprime todos os documentos no qual o valor de i é maior que 50:

collection.find(gt("i", 50)).subscribe(new PrintDocumentSubscriber());

Para especificar um filtro para uma faixa, como 50 < i <= 100, você pode usar o auxiliar and() :

collection.find(and(gt("i", 50), lte("i", 100)))
.subscribe(new PrintDocumentSubscriber());

Para atualizar documentos em uma collection, você pode usar os métodos updateOne() e updateMany() da collection.

Passe os seguintes parâmetros para os métodos:

  • Filtre objeto para determinar o documento ou documentos a serem atualizados. Para facilitar a criação de objetos de filtro, o driver fornece métodos assistente Filters . Para especificar um filtro vazio e corresponder a todos os documentos na coleção, use um objeto Document vazio.

  • Atualizar documento que especifica as modificações. Para exibir uma lista dos operadores disponíveis, consulte Operadores de atualização no manual do servidor MongoDB.

Os métodos de atualização retornam um tipo de UpdateResult que fornece informações sobre a operação, incluindo o número de documentos modificados pela atualização.

Para atualizar um único documento, use o método updateOne() .

O exemplo a seguir atualiza o primeiro documento no qual i está 10 e define o valor de i como 110:

collection.updateOne(eq("i", 10), set("i", 110))
.subscribe(new PrintSubscriber<UpdateResult>("Update Result: %s"));

Para atualizar todos os documentos correspondentes a um filtro de query, use o método updateMany() .

O exemplo a seguir incrementa o valor de i em 100 em todos os documentos nos quais o valor de i é menor que 100:

UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100))
.subscribe(new PrintSubscriber<UpdateResult>("Update Result: %s"));

Para excluir documentos de uma collection, você pode usar os métodos deleteOne() e deleteMany() da collection.

Passe um objeto de filtro para determinar o documento ou documentos a serem excluídos. Para facilitar a criação de objetos de filtro, o driver fornece métodos assistente Filters . Para especificar um filtro vazio e corresponder a todos os documentos na coleção, use um objeto Document vazio.

Os métodos de exclusão retornam um DeleteResult que fornece informações sobre a operação, incluindo o número de documentos excluídos.

Para excluir um único documento que corresponda ao filtro, use o método deleteOne() .

O exemplo a seguir exclui o primeiro documento em que o valor de i é igual a 110:

collection.deleteOne(eq("i", 110))
.subscribe(new PrintSubscriber<DeleteResult>("Delete Result: %s"));

Para excluir todos os documentos que correspondem ao filtro, use o método deleteMany() .

O exemplo a seguir exclui todos os documentos em que o valor de i é maior ou igual a 100:

DeleteResult deleteResult = collection.deleteMany(gte("i", 100))
.subscribe(new PrintSubscriber<DeleteResult>("Delete Result: %s"));

Para criar um índice em um campo ou campos, passe um documento de especificação de índice para o método createIndex() . Um documento de especificação da chave de índice contém os campos a serem indexados e o tipo de índice para cada campo, conforme modelado pelo seguinte documento:

new Document(<field1>, <type1>).append(<field2>, <type2>) ...

Para criar um tipo de índice ascendente, especifique 1 para <type>. Para criar um tipo de índice descendente, especifique -1 para <type>.

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

collection.createIndex(new Document("i", 1))
.subscribe(new PrintSubscriber<String>("Create Index Result: %s"));

Para exibir uma lista de outros tipos de índice, consulte o guia Criar índices .

Para obter tutoriais adicionais que demonstram como usar o MongoDB com POJOs, consulte o guia Início rápido (exemplos de POJO).

Para encontrar tutoriais adicionais, consulte a seção Tutoriais .

Voltar

Primário