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.
Pré-requisitos
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;
Faça uma conexão
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.
Conecte-se a uma única MongoDB deployment
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 porta27017
:MongoClient mongoClient = MongoClients.create(); Especifique explicitamente o
hostname
para se conectar a uma instância do MongoDB em execução no host especificado na porta27017
:MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne")))) .build()); Especifique explicitamente o
hostname
e oport
: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");
Acessar um banco de dados
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.
Acessar uma coleção
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.
Criar um documento
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
.
Insira um documento
Depois de ter o objeto MongoCollection
, você pode inserir documentos na coleção.
Inserir um documento
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>() { public void onSubscribe(final Subscription s) { s.request(1); // <--- Data requested and the insertion will now occur } public void onNext(final InsertOneResult result) { System.out.println("Inserted: " + result); } public void onError(final Throwable t) { System.out.println("Failed"); } 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
.
Insira vários documentos
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.
Contagem de documentos em uma coleçã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"));
Consulte a coleção
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.
Encontre o primeiro documento em uma coleção
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.
Encontre todos os documentos em uma coleção
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());
Especificar um filtro de query
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
.
Obtenha um único documento que corresponda a um filtro
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 }
Obter todos os documentos que correspondem a um filtro
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());
Atualize documentos
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 objetoDocument
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.
Atualizar um único documento
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"));
Atualizar vários documentos
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"));
Exclua documentos
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.
Excluir um único documento que corresponda a um filtro
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"));
Excluir todos os documentos que correspondem a um filtro
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"));
Crie índices
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 .
Informações adicionais
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 .