Alles wat u moet weten over MongoDB Client



Dit artikel biedt u een gedetailleerde en uitgebreide kennis van MongoDB Client met al zijn functies en toepassingen.

Als je al een tijdje een relationeel databasebeheersysteem bent, ben je waarschijnlijk de naam tegengekomen van . MongoDb werd voor het eerst geïntroduceerd in het jaar 2009 en is tegenwoordig een van de meest populaire relationele databasebeheersystemen in de branche. De belangrijkste reden achter zijn waanzinnige populariteit ondanks de aanwezigheid van oudere relationele databasesoftwaremanagers zoals MySql op de markt, is het grote aantal en de grote veelzijdigheid die het met zich meebrengt. Het gebruik van MongoDB elimineert veel behoeften, waaronder de noodzaak om een ​​database te maken en het gegevenstype te definiëren telkens wanneer een nieuw project wordt gestart. Agenda van het MongoDB-klantartikel:





Maar om de maximale functionaliteit uit MongoDB te halen, moet men bekend zijn met de MongoDB-client en in dit artikel zullen we precies dat bespreken.

Vereisten voor MongoDB Client

Om dit artikel volledig te kunnen gebruiken, moet u eerst aan de volgende voorwaarden voldoen.



Zorg dat er al een IDE in uw systeem aanwezig is.
Java Development Kit of JDK versie 1.8 en hoger geïnstalleerd met JAVA_HOME correct geconfigureerd.
Docker of MongoDB geïnstalleerd.
Apache Maven versie 3.5.3 en hoger.

De architectuur die we in deze handleiding hebben gemaakt en gebruikt, is een van de eenvoudigste. Bij uitvoering kan de gebruiker eenvoudig gegevens en elementen toevoegen aan een lijst, waarna deze automatisch wordt bijgewerkt in de database.

MongoDB Client-logo



Daarnaast hebben we ervoor gezorgd dat alle communicatie tussen de gegevens en de server in JSON verloopt en dat alle gegevens in MongoDB worden opgeslagen.

Aan de slag

Volg de onderstaande stappen om aan de slag te gaan met dit project.

Stap 1: het project op Maven maken

De eerste stap is altijd om een ​​nieuw project aan te maken en hiervoor de volgende code te gebruiken.

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 '

Wanneer u het bovenstaande commando uitvoert, zal de IDE de JSON-B-, MongoDb- en RESTEasy / JAX-RS-clients op uw systeem importeren.

Verdergaan met stap 2.

Stap 2: Uw allereerste JSON-rustservice toevoegen

Gebruik hiervoor onderstaande code. pakket org.acme.rest.json import java.util.Objects public class Fruit {private String name private String description public Fruit () {} public Fruit (String naam, String omschrijving) {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} @Override public boolean equals (Object obj) {if (! (obj instanceof Fruit)) {return false} Fruit other = (Fruit) obj return Objects.equals (other.name, this.name)} @Override public int hashCode () {return Objects.hash (this.name)}}

Met het bovenstaande voorbeeld hebben we eerst de vrucht gemaakt die later in het programma zal worden gebruikt.

Vervolgens moeten we het org.acme.rest.json.FruitService-bestand maken dat de gebruikerslaag van onze applicatie zal zijn. Gebruik hiervoor onderstaande code.

pakket 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 @ApplicationScoped openbare klasse FruitService {@Inject MongoClient mongoClient openbare lijst lijst () {Lijstlijst = nieuwe ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator ( ) probeer {while (cursor.hasNext ()) {Document document = cursor.next () Fruit fruit = new Fruit () fruit.setName (document.getString ('naam')) fruit.setDescription (document.getString ('description ')) list.add (fruit)}} eindelijk {cursor.close ()} return list} public void add (Fruit fruit) {Document document = nieuw document () .append (' naam ', fruit.getName ()) .append ('description', fruit.getDescription ()) getCollection (). insertOne (document)} private MongoCollection getCollection () {retourneer mongoClient.getDatabase ('fruit'). getCol lection ('fruit')}} Nu moeten we de klasse org.acme.rest.json.FruitResource aanpassen aan onze behoeften. Gebruik hiervoor onderstaande code. @Path ('/ fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) public class FruitResource {@Inject FruitService fruitService @GET public List list () {return fruitService.list ()} @POST public List add (Fruit fruit) {fruitService.add (fruit) retourlijst ()}}

Verdergaan met stap 3.

Stap 3: de mongoDb-database configureren

De syntaxis en de standaardcode voor het configureren van de mongoDb-database zijn hieronder weergegeven.

# configureer de mongoDB-client voor een replicaset van twee knooppunten quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017

In ons geval zullen we de volgende code gebruiken om de database te configureren.

# configureer de mongoDB-client voor een replicaset van twee knooppunten quarkus.mongodb.connection-string = mongodb: // localhost: 27017

Verdergaan met stap 4.

Stap 4: De geconfigureerde MongoDB-database uitvoeren

De volgende stap is het uitvoeren van de MongoDB-database die we zojuist hebben gemaakt. Maak hiervoor gebruik van onderstaande code.

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

Verdergaan met stap 5.

Stap # 5: de voorkant maken

Nu al het werk aan de achterkant van de applicatie is gedaan, gaan we eens kijken naar de code die wordt gebruikt om de voorkant van onze applicatie te coderen.

pakket 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.Inject import java.util.List import java.util.concurrent.CompletionStage @ApplicationScoped openbare klasse ReactiveFruitService {@Inject ReactiveMongoClient mongoClient openbare CompletionStage lijst () {retour getCollection (). find (). map (doc -> {Fruit fruit = nieuw fruit () fruit.setName ( doc.getString ('naam')) fruit.setDescription (doc.getString ('description')) return fruit}). toList (). run ()} public CompletionStage add (Fruit fruit) {Document document = new Document () .append ('naam', fruit.getName ()) .append ('beschrijving', fruit.getDescription ()) retour getCollection (). insertOne (document)} privé ReactiveMongoCollection getCollection () {retour mongoClient.getDatabase ('fruit' ) .getCollection ('fruit')}} pakket org.acme.rest.json import javax.inject.Inject import javax.ws.rs. * i mport 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) openbare klasse ReactiveFruitResource { @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) retourlijst ()}}

In bovenstaand voorbeeld maken we gebruik van een reactieve mongoDb-client om de vorming van het front-end te vergemakkelijken.

Verdergaan met stap 6.

Stap # 6: Vereenvoudiging van de mongoDb-client met behulp van de BSON-codec

Maak hiervoor gebruik van onderstaande code.

pakket 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 openbare klasse FruitCodec implementeert CollectibleCodec {privé definitief Codec documentCodec openbaar FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry (). get (Documentclass (). get ( )} @Override public 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)} @Override public Class getEncoderClass () {return Fruit.class} @Override public Fruit generationIdIfAbsentFromDocument (Fruit document) {if (! documentHasId (document)) {document.setId ( UUID.randomUUID (). ToString ())} return document} @Override public boolean documentHasId ( Fruit document) {return document.getId ()! = Null} @Override public BsonValue getDocumentId (Fruit document) {return new BsonString (document.getId ())} @Override public Fruit decode (BsonReader reader, DecoderContext decoderContext) {Document document = documentCodec.decode (reader, decoderContext) Fruit fruit = nieuw fruit () if (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (document .getString ('naam')) fruit.setDescription (document.getString ('beschrijving')) retour fruit}}

Nu gaan we gebruik maken van een CodecProvider om dit te koppelen aan de reeds aanwezige Fruit class.

pakket 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 openbare klasse FruitCodecProvider implementeert CodecProvider {@Override public Codec get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) new FruitCodec ()} return null}}

Verdergaan met stap 7.

Stap # 7: definitieve code

De uiteindelijke code voor deze applicatie ziet er ongeveer zo uit.

pakket 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 @ApplicationScoped openbare klasse CodecFruitService {@Inject MongoClient mongoClient openbare lijst lijst () {Lijstlijst = nieuwe ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () probeer {while (cursor .hasNext ()) {list.add (cursor.next ())}} eindelijk {cursor.close ()} return list} public void add (Fruit fruit) {getCollection (). insertOne (fruit)} private MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}

Conclusie

Nu weet u hoe u de MongoDB-client in uw systeem moet configureren en gebruiken. Ga je gang en probeer deze codes in uw systeem en laat ons uw ervaring weten.

Samenvatting van het artikel

c ++ array sorteren

Leer alles over de MongoDB-client en hoe u deze in uw systeem voor verschillende doeleinden kunt configureren. Lees verder om meer te weten.

Hiermee komen we aan het einde van de ' MongoDB-client ' artikel.