MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Tudo o que você precisa saber sobre o cliente MongoDB

Se você tem algum tipo de sistema de gerenciamento de banco de dados relacional há algum tempo, provavelmente já se deparou com o nome MongoDB. Introduzido pela primeira vez no ano de 2009, hoje o mongoDb é um dos sistemas de gerenciamento de banco de dados relacionais mais populares do setor. A principal razão por trás de sua popularidade insana, apesar da presença de gerenciadores de software de banco de dados relacionais mais antigos, como o MySql, presentes no mercado, é a amplitude de números e a grande versatilidade que ele traz para a mesa. O uso do MongoDB elimina muitas necessidades, entre elas a necessidade de criar um banco de dados e definir o tipo de dados toda vez que um novo projeto é iniciado. Agenda do artigo do cliente MongoDB:

  • Pré-requisitos para o cliente MongoDB
  • Criando o projeto no Maven
  • Adicionando seu primeiro serviço de descanso JSON
  • Configurando o banco de dados MongoDB
  • Executando o banco de dados MongoDB configurado
  • Criando o front-end
  • Simplificando o cliente MongoDB usando codec BSON
  • Código final


Mas para obter o máximo de funcionalidade do MongoDB, é preciso estar familiarizado com o cliente MongoDB e neste artigo, discutiremos exatamente isso.


Pré-requisitos para o cliente MongoDB

Para que este artigo seja completo, você precisará primeiro atender aos seguintes pré-requisitos.

Tenha um IDE já presente em seu sistema.
Java Development Kit ou JDK versão 1.8 e superior instalado com JAVA_HOME configurado corretamente.
Docker ou MongoDB instalado.
Apache Maven versão 3.5.3 e superior.

A arquitetura que criamos e usamos neste guia é uma das mais simples. Quando executado, o usuário pode facilmente adicionar dados e elementos em uma lista, após o que será atualizado automaticamente no banco de dados.


Junto com isso, garantimos que toda a comunicação entre os dados e o servidor seja em JSON e todos os dados sejam armazenados no MongoDB.


Primeiros passos

Para iniciar este projeto, siga as etapas descritas abaixo.

Etapa 1:Criando o projeto no Maven


O primeiro passo é sempre criar um novo projeto e para isso utilize o seguinte código.
mvn io.quarkus:quarkus-maven-plugin:0.22.0:create -DprojectGroupId=org.acme -DprojectArtifactId=using-mongodb-client -DclassName="org.acme.rest.json.FruitResource" -Dpath="/fruits" -Dextensions="resteasy-jsonb,mongodb-client"

Ao executar o comando acima, o IDE importará os clientes JSON-B, MongoDb e RESTEasy/JAX-RS para seu sistema.

Continuando com o Passo 2.


Etapa 2:adicionar seu primeiro serviço de descanso JSON

Para fazer isso, use o código abaixo.package org.acme.rest.json;import java.util.Objects;public class Fruit {private String name;private String description;public Fruit() {}public Fruit (String name, String description) {this.name =name;this.description =description;}public String getName() {return name;}public void setName(String name) {this.name =name;}public String getDescription( ) {return description;}public void setDescription(String description) {this.description =description;}@Overridepublic boolean equals(Object obj) {if (!(obj instanceof Fruit)) {return false;}Fruit other =(Fruit) obj;return Objects.equals(other.name, this.name);}@Overridepublic int hashCode() {return Objects.hash(this.name);}}

Com o exemplo acima, criamos primeiro o Fruit que será usado posteriormente no programa.

Em seguida, precisamos criar o arquivo org.acme.rest.json.FruitService que será a camada de usuário de nossa aplicação. Para fazer isso, use o código abaixo.
pacote org.acme.rest.json;importar com.mongodb.client.MongoClient;importar com.mongodb.client.MongoCollection;importar com.mongodb.client.MongoCursor;importar org.bson.Document;importar javax.enterprise .context.ApplicationScoped;importar javax.inject.Inject;importar java.util.ArrayList;importar java.util.List;@ApplicationScopedpublic class FruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>( );MongoCursor cursor =getCollection().find().iterator();tente {while (cursor.hasNext()) {Documento document =cursor.next();Fruit fruit =new Fruit();fruit.setName(document .getString("name"));fruit.setDescription(document.getString("description"));list.add(fruit);}} finalmente {cursor.close();}return list;}public void add(Fruit fruit){Document document =new Document().append("name", fruit.getName()).append("description", fruit.getDescription());getCollection().insertOne(document);}private MongoCollection getCollection (){return mongoClient.getDatabase("fruta").getCollection ("fruit");}}Agora precisamos editar a classe org.acme.rest.json.FruitResource para atender às nossas necessidades. Para fazer isso, use o código abaixo.@Path("/fruits")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public class FruitResource {@Inject FruitService fruitService;@GETpublic List list() {return fruitService.list();}@POSTpublic List add(Fruit fruit) {fruitService.add(fruit);return list();}}

Continuando com o Passo 3.


Etapa 3:Configurando o banco de dados mongoDb


A sintaxe, bem como o código padrão para configurar o banco de dados mongoDb, é fornecido abaixo.
# configure o cliente mongoDB para um conjunto de réplicas de dois nodesquarkus.mongodb.connection-string =mongodb://mongo1:27017,mongo2:27017

No nosso caso, usaremos o seguinte código para configurar o banco de dados.
# configure o cliente mongoDB para um conjunto de réplicas de dois nodesquarkus.mongodb.connection-string =mongodb://localhost:27017

Continuando com o Passo 4.




Etapa 4:Executando o banco de dados MongoDB configurado


A próxima etapa é executar o banco de dados MongoDB que acabamos de criar. Para isso, use o código abaixo.
docker run -ti --rm -p 27017:27017 mongo:4.0

Continuando com o Passo 5.




Etapa 5:fazendo o front-end


Agora que todo o trabalho no back-end do aplicativo foi feito, vamos dar uma olhada no código usado para codificar o front-end do nosso aplicativo.
pacote org.acme.rest.json;importar io.quarkus.mongodb.ReactiveMongoClient;importar io.quarkus.mongodb.ReactiveMongoCollection;importar org.bson.Document;importar javax.enterprise.context.ApplicationScoped;importar javax.inject .Inject;importar java.util.List;importar java.util.concurrent.CompletionStage;@ApplicationScopedpublic class ReactiveFruitService {@InjectReactiveMongoClient mongoClient;public CompletionStage list(){return getCollection().find().map(doc -> {Fruit fruit =new Fruit();fruit.setName(doc.getString("name"));fruit.setDescription(doc.getString("description"));return fruit;}).toList().run( );}public CompletionStage add(Fruit fruit){Document document =new Document().append("name", fruit.getName()).append("description", fruit.getDescription());return getCollection(). insertOne(document);}private ReactiveMongoCollection getCollection(){return mongoClient.getDatabase("fruit").getCollection("fruit");}}package org.acme.rest.json;import javax.inject.Inject;import javax. ws.rs.*;imp ort javax.ws.rs.core.MediaType;importar java.util.List;importar java.util.concurrent.CompletionStage;@Path("/reactive_fruits")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public class ReactiveFruitResource {@Inject ReactiveFruitService fruitService;@GETpublic CompletionStage list() {return fruitService.list();}@POSTpublic CompletionStage add(Fruit fruit) {fruitService.add(fruit);return list(); }}

No exemplo acima, estamos fazendo uso de um cliente mongoDb reativo para facilitar a formação do front-end.

Continuando com o Passo 6.


Etapa 6:simplificando o cliente mongoDb usando o codec BSON


Para isso, use o código abaixo.
pacote org.acme.rest.json.codec;importar com.mongodb.MongoClient;importar org.acme.rest.json.Fruit;importar org.bson.*;importar org.bson.codecs.Codec;importar org .bson.codecs.CollectibleCodec;importar org.bson.codecs.DecoderContext;importar org.bson.codecs.EncoderContext;importar java.util.UUID;classe pública FruitCodec implementa CollectibleCodec {codec final privado documentCodec;public FruitCodec() {this. documentCodec =MongoClient.getDefaultCodecRegistry().get(Document.class);}@Overridepublic void encode(BsonWriter writer, Fruit Fruit, EncoderContext encoderContext) {Document doc =new Document();doc.put("name", fruit.getName ());doc.put("description", fruit.getDescription());documentCodec.encode(writer, doc, encoderContext);}@Overridepublic Class getEncoderClass() {return Fruit.class;}@Overridepublic Fruit generateIdIfAbsentFromDocument(Fruit document) {if (!documentHasId(document)) {document.setId(UUID.randomUUID().toString());}return document;}@Overridepublic boolean documentHasId(Fruit docu ment) {return document.getId() !=null;}@Overridepublic BsonValue getDocumentId(Fruit document) {return new BsonString(document.getId());}@Overridepublic Fruit decode(BsonReader reader, DecoderContext decoderContext) {Document document =documentCodec.decode(reader, decoderContext);Fruit fruit =new Fruit();if (document.getString("id") !=null) {fruit.setId(document.getString("id"));}fruit.setName (document.getString("name"));fruit.setDescription(document.getString("description"));return fruta;}}

Agora faremos uso de um CodecProvider para vincular isso à classe Fruit já presente.
pacote org.acme.rest.json.codec;importar org.acme.rest.json.Fruit;importar org.bson.codecs.Codec;importar org.bson.codecs.configuration.CodecProvider;importar org.bson. codecs.configuration.CodecRegistry;public class FruitCodecProvider implementa CodecProvider {@Overridepublic Codec get(Class clazz, CodecRegistry registry) {if (clazz ==Fruit.class) {return (Codec) new FruitCodec();}return null;}} 
Continuando com o Passo 7.


Etapa 7:código final


O código final para este aplicativo será algo assim.
pacote org.acme.rest.json;importar com.mongodb.client.MongoClient;importar com.mongodb.client.MongoCollection;importar com.mongodb.client.MongoCursor;importar javax.enterprise.context.ApplicationScoped;importar javax .inject.Inject;importar java.util.ArrayList;importar java.util.List;@ApplicationScopedpublic class CodecFruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>();MongoCursor cursor =getCollection( ).find().iterator();tente {while (cursor.hasNext()) {list.add(cursor.next());}} finalmente {cursor.close();}return list;}public void add (Fruit fruit){getCollection().insertOne(fruit);}private MongoCollection getCollection(){return mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class);}}

Conclusão

Agora você sabe como configurar e usar o cliente MongoDB em seu sistema. Vá em frente e experimente estes códigos no seu sistema e conte-nos a sua experiência.


Resumo do artigo

Saiba tudo sobre o cliente MongoDB e como você pode configurar o mesmo em seu sistema para diversos usos. Leia para saber mais.

Com isso, chegamos ao fim do Cliente MongoDB artigo.
Próximos lotes para o curso de treinamento de certificação MongoDB

Nome do curso Data
Curso de treinamento para certificação MongoDB
Aula começa em 4 de junho de 2022

4 de junho
SAT&SUN (lote de fim de semana)
Ver detalhes
Curso de treinamento para certificação MongoDB
Aula começa em 6 de agosto de 2022

6 de agosto
SAT&SUN (lote de fim de semana)
Ver detalhes