MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Tout ce que vous devez savoir sur le client MongoDB

Si vous utilisez une forme de système de gestion de base de données relationnelle depuis un certain temps maintenant, vous avez probablement rencontré le nom de MongoDB. Introduit pour la première fois en 2009, mongoDb est aujourd'hui l'un des systèmes de gestion de bases de données relationnelles les plus populaires du secteur. La principale raison de sa popularité folle malgré la présence d'anciens gestionnaires de logiciels de bases de données relationnelles comme MySql présents sur le marché est le nombre important et la grande polyvalence qu'il apporte à la table. L'utilisation de MongoDB élimine de nombreux besoins, l'un d'entre eux étant la nécessité de créer une base de données et de définir le type de données à chaque démarrage d'un nouveau projet. Ordre du jour de l'article client MongoDB :

  • Prérequis pour le client MongoDB
  • Créer le projet sur Maven
  • Ajout de votre tout premier service de repos JSON
  • Configuration de la base de données MongoDB
  • Exécuter la base de données MongoDB configurée
  • Création du front-end
  • Simplification du client MongoDB à l'aide du codec BSON
  • Code final

Mais pour tirer le maximum de fonctionnalités de MongoDB, il faut être familier avec le client MongoDB et dans cet article, nous en discuterons.

Prérequis pour le client MongoDB

Pour que cet article soit complet, vous devrez d'abord remplir les conditions préalables suivantes.

Avoir un IDE déjà présent dans votre système.
Java Development Kit ou JDK version 1.8 et supérieure installé avec JAVA_HOME correctement configuré.
Docker ou MongoDB installé.
Apache Maven versions 3.5.3 et supérieures.

L'architecture que nous avons créée et utilisée dans ce guide est l'une des plus simples. Une fois exécuté, l'utilisateur peut facilement ajouter des données et des éléments dans une liste, après quoi elle sera automatiquement mise à jour dans la base de données.

Parallèlement à cela, nous nous sommes assurés que toute la communication entre les données et le serveur est en JSON et que toutes les données sont stockées dans MongoDB.

Mise en route

Afin de démarrer ce projet, suivez les étapes décrites ci-dessous.

Étape 1 :Création du projet sur Maven

La première étape consiste toujours à créer un nouveau projet et pour ce faire, utilisez le code suivant.

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"

Lorsque vous exécutez la commande ci-dessus, l'IDE importera les clients JSON-B, MongoDb ainsi que RESTEasy/JAX-RS sur votre système.

Passez à l'étape 2.

Étape 2 :Ajouter votre tout premier service de repos JSON

Pour ce faire, utilisez le code ci-dessous.package org.acme.rest.json;import java.util.Objects;public class Fruit {private String name;private String description;public Fruit() {}public Fruit (Nom de la chaîne, description de la chaîne) {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);}}

Avec l'exemple ci-dessus, nous avons d'abord créé le Fruit qui sera ensuite utilisé dans le programme.

Ensuite, nous devons créer le fichier org.acme.rest.json.FruitService qui sera la couche utilisateur de notre application. Pour ce faire, utilisez le code ci-dessous.

paquet org.acme.rest.json;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import org.bson.Document;import javax.enterprise .context.ApplicationScoped;import javax.inject.Inject;import java.util.ArrayList;import java.util.List;@ApplicationScopedpublic class FruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>( );MongoCursorcursor =getCollection().find().iterator();try {while (cursor.hasNext()) {Document document =cursor.next();Fruit fruit =new Fruit();fruit.setName(document .getString("nom"));fruit.setDescription(document.getString("description"));list.add(fruit);}} enfin {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 (){retourner mongoClient.getDatabase("fruit").getCollection ("fruit");}}Nous devons maintenant modifier la classe org.acme.rest.json.FruitResource en fonction de nos besoins. Pour ce faire, utilisez le code ci-dessous.@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();}}

Passez à l'étape 3.

Étape 3 :Configurer la base de données mongoDb

La syntaxe ainsi que le code standard pour configurer la base de données mongoDb sont indiqués ci-dessous.

# configurer le client mongoDB pour un ensemble de réplicas de deux nodesquarkus.mongodb.connection-string =mongodb://mongo1:27017,mongo2:27017

Dans notre cas, nous utiliserons le code suivant pour configurer la base de données.

# configurer le client mongoDB pour un jeu de réplicas de deux nodesquarkus.mongodb.connection-string =mongodb://localhost:27017

Passez à l'étape 4.

Étape 4 :Exécuter la base de données MongoDB configurée

L'étape suivante consiste à exécuter la base de données MongoDB que nous venons de créer. Pour ce faire, utilisez le code ci-dessous.

docker run -ti --rm -p 27017:27017 mongo:4.0

Passez à l'étape 5.

Étape 5 :Création de l'avant-plan

Maintenant que tout le travail au niveau du backend de l'application est terminé, examinons le code utilisé pour coder le frontend de notre application.

paquet org.acme.rest.json;import io.quarkus.mongodb.ReactiveMongoClient;import io.quarkus.mongodb.ReactiveMongoCollection;import org.bson.Document;import javax.enterprise.context.ApplicationScoped;import javax.inject .Injecter;importer java.util.List;importer 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;import java.util.List;import 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(); }}

Dans l'exemple ci-dessus, nous utilisons un client mongoDb réactif pour faciliter la formation du front-end.

Passez à l'étape 6.

Étape 6 :Simplifier le client mongoDb à l'aide du codec BSON

Pour ce faire, utilisez le code ci-dessous.

paquet org.acme.rest.json.codec;import com.mongodb.MongoClient;import org.acme.rest.json.Fruit;import org.bson.*;import org.bson.codecs.Codec;import org .bson.codecs.CollectibleCodec;import org.bson.codecs.DecoderContext;import org.bson.codecs.EncoderContext;import java.util.UUID;public class FruitCodec implements CollectibleCodec {private final Codec 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 fruit;}}

Nous allons maintenant utiliser un CodecProvider pour le lier à la classe Fruit déjà présente.

paquet org.acme.rest.json.codec;import org.acme.rest.json.Fruit;import org.bson.codecs.Codec;import org.bson.codecs.configuration.CodecProvider;import org.bson. codecs.configuration.CodecRegistry;public class FruitCodecProvider implements CodecProvider {@Overridepublic Codec get(Class clazz, CodecRegistry register) {if (clazz ==Fruit.class) {return (Codec) new FruitCodec();}return null;}} 

Passez à l'étape 7.

Étape 7 :Code final

Le code final de cette application ressemblera à ceci.

paquet org.acme.rest.json;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import javax.enterprise.context.ApplicationScoped;import javax .inject.Inject;import java.util.ArrayList;import java.util.List;@ApplicationScopedpublic class CodecFruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>();MongoCursorcursor =getCollection( ).find().iterator();essayez {while (cursor.hasNext()) {list.add(cursor.next());}} enfin {cursor.close();}return list;}public void add (Fruit fruit){getCollection().insertOne(fruit);}private MongoCollection getCollection(){return mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class);}}

Conclusion

Vous savez maintenant comment configurer et utiliser le client MongoDB dans votre système. Allez-y, essayez ces codes dans votre système et faites-nous part de votre expérience.

Résumé de l'article

Apprenez tout sur le client MongoDB et comment vous pouvez le configurer dans votre système pour diverses utilisations. Lisez la suite pour en savoir plus.

Avec cela, nous arrivons à la fin du " Client MongoDB article.

Lots à venir pour le cours de formation à la certification MongoDB
Nom du cours Date
Cours de formation à la certification MongoDB

Le cours commence le 4 juin 2022

4 juin

SAM&SUN (lot de week-end)
Afficher les détails
Cours de formation à la certification MongoDB

Le cours commence le 6 août 2022

6 août

SAM&SUN (lot de week-end)
Afficher les détails