Allt du behöver veta om MongoDB-klienten



Den här artikeln ger dig en detaljerad och omfattande kunskap om MongoDB Client med alla dess funktioner och användningsområden.

Om du har varit någon form av relationsdatabashanteringssystem under en tid nu har du förmodligen stött på namnet på . Först infördes år 2009, idag är mongoDb ett av de mest populära relationsdatabashanteringssystemen i branschen. Den främsta anledningen till dess vansinniga popularitet trots närvaron av äldre relationsdatabashanterare som MySql som finns på marknaden är det stora antalet och den stora mångsidighet det ger till bordet. Användningen av MongoDB eliminerar många behov, bland annat behovet av att skapa en databas och definiera datatypen varje gång ett nytt projekt startas. Dagordning för MongoDB-klientartikeln:

omvänd ett tal i Java





Men för att uppnå maximal funktionalitet ur MongoDB måste man vara bekant med MongoDB-klienten och i den här artikeln kommer vi att diskutera just det.

Förutsättningar för MongoDB Client

För att denna artikel ska kunna fullgöras måste du först uppfylla följande förutsättningar.



Ha en IDE redan närvarande i ditt system.
Java Development Kit eller JDK version 1.8 och högre installerat med JAVA_HOME konfigurerat korrekt.
Docker eller MongoDB installerat.
Apache Maven version 3.5.3 och senare.

Arkitekturen som vi har skapat och använt i den här guiden är en av de enklaste. När den körs kan användaren enkelt lägga till data och element i en lista, varefter den automatiskt uppdateras i databasen.

MongoDB-klientlogotyp



Tillsammans med detta har vi försäkrat oss om att all kommunikation mellan data och servern sker i JSON och all information lagras i MongoDB.

Komma igång

För att komma igång med detta projekt, följ stegen nedan.

Steg 1: Skapa projektet på Maven

Det första steget är alltid att skapa ett nytt projekt och för att göra detta, använd följande kod.

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ör kommandot ovan importerar IDE JSON-B, MongoDb samt RESTEasy / JAX-RS-klienter till ditt system.

Gå vidare med steg 2.

Steg 2: Lägg till din allra första JSON-vilotjänst

För att göra detta, använd koden nedan. paket 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 booleska är lika med (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 (detta.namn)}}

Med exemplet ovan har vi först skapat frukten som senare kommer att användas i programmet.

Därefter måste vi skapa filen org.acme.rest.json.FruitService som kommer att vara användarlagret i vår applikation. För att göra detta, använd koden nedan.

paket 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 .Injicera import java.util.ArrayList importera java.util.List @ApplicationScoped public class FruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () ) prova {while (cursor.hasNext ()) {Document document = cursor.next () Fruit fruit = new Fruit () fruit.setName (document.getString ('name')) fruit.setDescription (document.getString ('description ')) list.add (fruit)}} äntligen {cursor.close ()} returnlista} public void add (Fruit fruit) {Document document = new Document () .append (' name ', fruit.getName ()) .append ('beskrivning', fruit.getDescription ()) getCollection (). insertOne (dokument)} privat MongoCollection getCollection () {return mongoClient.getDatabase ('fruit'). getCol lection ('fruit')}} Nu måste vi redigera klassen org.acme.rest.json.FruitResource för att passa våra behov. För att göra detta, använd koden nedan. @Path ('/ fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) public class FruitResource {@Inject FruitService fruitService @GET public Listlista () {return fruitService.list ()} @POST public Lista lägg till (Fruktfrukt) {fruitService.add (frukt) returlista ()}}

Gå vidare med steg 3.

Steg 3: Konfigurera mongoDb-databasen

Syntaxen samt standardkoden för att konfigurera mongoDb-databasen är enligt nedan.

# konfigurera mongoDB-klienten för en replikuppsättning med två noder quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017

I vårt fall kommer vi att använda följande kod för att konfigurera databasen.

# konfigurera mongoDB-klienten för en replikuppsättning med två noder quarkus.mongodb.connection-string = mongodb: // localhost: 27017

Gå vidare med steg 4.

Steg 4: Köra den konfigurerade MongoDB-databasen

Nästa steg är att köra MongoDB-databasen som vi just skapade. För att göra detta, använd koden nedan.

.trim () java
docker run -ti --rm -p 27017: 27017 mongo: 4.0

Gå vidare med steg 5.

Steg 5: Gör fronten

Nu när allt arbete i baksidan av applikationen är klar, låt oss ta en titt på koden som används för att koda framsidan av vår applikation.

paket 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 importera 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 ('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)} privat ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('fruit' ) .getCollection ('fruit')}} paket 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 klass ReactiveFruit @Inject ReactiveFruitService fruitService @ GET public CompletionStage list () {return fruitService.list ()} @ POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}

I exemplet ovan använder vi oss av en reaktiv mongoDb-klient för att underlätta bildandet av fronten.

Gå vidare med steg 6.

Steg 6: Förenkla mongoDb-klienten med BSON-codec

För att göra detta, använd koden nedan.

paket org.acme.rest.json.codec importerar com.mongodb.MongoClient importerar org.acme.rest.json.Fruit importerar org.bson. * importerar org.bson.codecs.Codec importerar org.bson.codecs.CollectibleCodec importerar org .bson.codecs.DecoderContext import org.bson.codecs.EncoderContext import java.util.UUID public class FruitCodec implementerar CollectibleCodec {privat slutlig Codec documentCodec offentligt FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry (). )} @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 generateIdIfAbsentFromDocument (Fruit document) {if (! documentHasId (document)) {document.setId ( UUID.randomUUID (). ToString ())} returnera dokument} @Override public boolean documentHasId ( Fruktdokument) {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 ('name')) fruit.setDescription (document.getString ('description')) return fruit}}

Nu kommer vi att använda en CodecProvider för att länka detta till den redan närvarande fruktklassen.

paket org.acme.rest.json.codec importerar org.acme.rest.json.Fruit importerar org.bson.codecs.Codec importerar org.bson.codecs.configuration.CodecProvider importerar org.bson.codecs.configuration.CodecRegistry allmän klass FruitCodecProvider implementerar CodecProvider {@Override public Codec get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) new FruitCodec ()} return null}}

Gå vidare med steg 7.

Steg 7: Slutlig kod

Den slutliga koden för den här applikationen kommer att se ut så här.

paket 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.Injicera import java.util .ArrayList importerar 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 ())}} slutligen {cursor.close ()} returlista} public void add (Fruit fruit) {getCollection (). insertOne (fruit)} privat MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}

Slutsats

Nu vet du hur du konfigurerar och använder MongoDB-klienten i ditt system. Fortsätt och prova dessa koder i ditt system och låt oss veta din erfarenhet.

Artikelöversikt

Lär dig allt om MongoDB-klienten och hur du kan konfigurera detsamma i ditt system för olika användningsområden. Läs vidare för att veta mer.

Med detta kommer vi till slutet av ' MongoDB-klient ' artikel.