Alt hvad du behøver at vide om MongoDB-klienten



Denne artikel giver dig en detaljeret og omfattende viden om MongoDB Client med alle dens funktioner og anvendelser.

Hvis du har været nogen form for relationsdatabasehåndteringssystem i nogen tid nu, er du sandsynligvis stødt på navnet på . Først introduceret i år 2009, i dag er mongoDb et af de mest populære relationsdatabasesystemer i branchen. Hovedårsagen til dens vanvittige popularitet på trods af tilstedeværelsen af ​​ældre relationelle databasesoftwarechefer som MySql til stede på markedet er det store antal og store alsidighed, det bringer til bordet. Brug af MongoDB eliminerer mange behov, blandt dem behovet for at oprette en database og definere datatypen hver gang et nyt projekt startes. Dagsorden for MongoDB-klientartiklen:





Men for at opnå den maksimale funktionalitet ud af MongoDB, skal man være fortrolig med MongoDB-klienten, og i denne artikel vil vi diskutere netop det.

Forudsætninger for MongoDB Client

For at denne artikel kan udføres fuldt ud, skal du først opfylde følgende forudsætninger.



ansible vs marionet vs kok

Har en IDE allerede til stede i dit system.
Java Development Kit eller JDK version 1.8 og derover installeret med JAVA_HOME konfigureret korrekt.
Docker eller MongoDB installeret.
Apache Maven version 3.5.3 og nyere.

Arkitekturen, som vi har oprettet og brugt i denne vejledning, er en af ​​de enkleste. Når den udføres, kan brugeren nemt tilføje data og elementer på en liste, hvorefter den automatisk opdateres i databasen.

MongoDB-klientlogo



Sammen med dette har vi sørget for, at al kommunikation mellem data og server er i JSON, og alle data er gemt i MongoDB.

Kom godt i gang

For at komme i gang med dette projekt skal du følge nedenstående trin.

Trin # 1: Oprettelse af projektet på Maven

Det første trin er altid at oprette et nyt projekt, og for at gøre dette skal du bruge følgende kode.

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 '

Når du kører ovenstående kommando, importerer IDE JSON-B, MongoDb samt RESTEasy / JAX-RS klienter til dit system.

Gå videre med trin 2.

Trin # 2: Tilføjelse af din allerførste JSON-hviletjeneste

For at gøre dette skal du bruge koden nedenfor. pakke 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} @Override public boolsk er lig med (Objekt obj) {hvis (! (obj eksempel på frugt)) {returner falsk} Frugt andet = (Frugt) obj return Objects.equals (other.name, this.name)} @ Override public int hashCode () {return Objects.hash (dette.navn)}}

Med ovenstående eksempel har vi først oprettet Frugten, som senere vil blive brugt i programmet.

Dernæst skal vi oprette org.acme.rest.json.FruitService-filen, som vil være brugerlaget i vores applikation. For at gøre dette skal du bruge koden nedenfor.

pakke 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 .Injicer import java.util.ArrayList import java.util.List @ApplicationScoped public class FruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () ) prøv {while (cursor.hasNext ()) {Document document = cursor.next () Fruit fruit = new Fruit () fruit.setName (document.getString ('name')) fruit.setDescription (document.getString ('description ')) list.add (fruit)}} endelig {cursor.close ()} returliste} public void add (Fruit fruit) {Document document = new Document () .append (' name ', fruit.getName ()) .append ('beskrivelse', fruit.getDescription ()) getCollection (). insertOne (dokument)} privat MongoCollection getCollection () {return mongoClient.getDatabase ('fruit'). getCol lection ('fruit')}} Nu skal vi redigere klassen org.acme.rest.json.FruitResource, så de passer til vores behov. For at gøre dette skal du bruge koden nedenfor. @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 tilføj (Frugtfrugt) {fruitService.add (frugt) returliste ()}}

Gå videre med trin 3.

Trin # 3: Konfiguration af mongoDb-databasen

Syntaksen såvel som standardkoden til konfiguration af mongoDb-databasen er som angivet nedenfor.

# konfigurer mongoDB-klienten til et replikasæt med to noder quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017

I vores tilfælde bruger vi følgende kode til at konfigurere databasen.

# konfigurer mongoDB-klienten til et replika-sæt med to noder quarkus.mongodb.connection-string = mongodb: // localhost: 27017

Gå videre med trin 4.

Trin # 4: Kørsel af den konfigurerede MongoDB-database

Det næste trin er at køre den MongoDB-database, vi lige har oprettet. For at gøre dette skal du bruge nedenstående kode.

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

Gå videre med trin 5.

Trin # 5: Gør frontenden

Nu hvor alt arbejdet i backend af applikationen er udført, lad os se på den kode, der bruges til at kode frontenden af ​​vores applikation.

pakke 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 public class ReactiveFruitService {@Inject ReactiveMongoClient mongoClient public CompletionStage list () {return getCollection (). find (). map (doc -> {Fruit fruit = new Fruit () fruit.setName () doc.getString ('navn')) fruit.setDescription (doc.getString ('beskrivelse')) returnerer frugt}). toList (). run ()} public CompletionStage add (Fruit fruit) {Dokumentdokument = nyt dokument () .append ('name', fruit.getName ()) .append ('description', fruit.getDescription ()) returnering getCollection (). insertOne (dokument)} privat ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('fruit' ) .getCollection ('fruit')}} pakke 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) offentlig klasse ReactiveFruit @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}

I ovenstående eksempel bruger vi en reaktiv mongoDb-klient, der letter dannelsen af ​​frontenden.

Gå videre med trin 6.

Trin # 6: Forenkling af mongoDb-klienten ved hjælp af BSON-codec

For at gøre dette skal du bruge nedenstående kode.

pakke 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 offentlig klasse FruitCodec implementerer CollectibleCodec {privat endelig Codec documentCodec offentlig FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry (). )} @ Override offentlig tomkodning (BsonWriter-forfatter, frugtfrugt, EncoderContext encoderContext) {Dokument doc = nyt dokument () doc.put ('navn', fruit.getName ()) doc.put ('beskrivelse', fruit.getDescription ()) documentCodec.encode (forfatter, doc, encoderContext)} @ Override public Class getEncoderClass () {return Fruit.class} @ Override public Fruit generererIdIfAbsentFromDocument (Frugtdokument) {if (! documentHasId (dokument)) {document.setId ( UUID.randomUUID (). ToString ())} returner dokument} @ Override public boolean documentHasId ( Frugtdokument) {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 = new Fruit () if (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (document .getString ('navn')) fruit.setDescription (document.getString ('beskrivelse')) returnere frugt}}

Nu vil vi bruge en CodecProvider til at linke dette til den allerede eksisterende frugtklasse.

pakke 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 offentlig klasse FruitCodecProvider implementerer CodecProvider {@Override public Codec get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) ny FruitCodec ()} returner null}}

Gå videre med trin 7.

Trin # 7: Endelig kode

Den endelige kode for denne applikation vil se sådan ud.

pakke 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 public class CodecFruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () try {while (cursor) .hasNext ()) {list.add (cursor.next ())}} endelig {cursor.close ()} returliste} public void add (Fruit fruit) {getCollection (). insertOne (fruit)} private MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}

Konklusion

Nu ved du, hvordan du konfigurerer og bruger MongoDB-klienten i dit system. Gå videre og prøv disse koder i dit system, og fortæl os din oplevelse.

Artikeloversigt

Lær alt om MongoDB-klienten, og hvordan du kan konfigurere det samme i dit system til forskellige anvendelser. Læs videre for at vide mere.

Med dette kommer vi til slutningen af ' MongoDB-klient ' artikel.