sql >> Database teknologi >  >> NoSQL >> MongoDB

Alt hvad du behøver at vide om MongoDB Client

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

  • Forudsætninger for MongoDB Client
  • Oprettelse af projektet på Maven
  • Tilføjelse af din allerførste JSON-hviletjeneste
  • Konfiguration af MongoDB-databasen
  • Kørsel af den konfigurerede MongoDB-database
  • Gør frontend
  • Forenkling af MongoDB-klienten ved hjælp af BSON-codec
  • Endelig kode

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

Forudsætninger for MongoDB-klient

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

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

Arkitekturen, som vi har skabt og brugt i denne guide, er en af ​​de enkleste. Når den er udført, kan brugeren nemt tilføje data og elementer i en liste, hvorefter den automatisk bliver opdateret i databasen.

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 trinene nedenfor.

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, vil IDE importere JSON-B, MongoDb samt RESTEasy/JAX-RS klienterne til dit system.

Fortsæt med trin 2.

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

For at gøre dette skal du bruge koden nedenfor.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;}offentlig streng getName() {return name;}public void setName(String name) {this.name =name;}offentlig streng 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;retur Objects.equals(other.name, this.name);}@Overridepublic int hashCode() {return Objects.hash(this.name);}}

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

Dernæst skal vi oprette filen org.acme.rest.json.FruitService, som vil være brugerlaget i vores applikation. For at gøre dette, brug 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.Inject;import java.util.ArrayList;import java.util.List;@ApplicationScopedpublic class FruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>( );MongoCursor cursor =getCollection().find().iterator();try {while (cursor.hasNext()) {Document document =cursor.next();Fruit fruit =new Fruit();fruit.setName(document .getString("navn"));fruit.setDescription(document.getString("description"));list.add(fruit);}} til sidst {cursor.close();}returliste;}offentlig ugyldig tilføjelse(Fruit) fruit){Document document =new Document().append("navn", fruit.getName()).append("description", fruit.getDescription());getCollection().insertOne(document);}privat MongoCollection getCollection (){return mongoClient.getDatabase("frugt").getCollection ("fruit");}}Nu skal vi redigere org.acme.rest.json.FruitResource-klassen, så den 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;@GETpublic List list() {return fruitService.list();}@POSTpublic List add(Fruit fruit) {fruitService.add(fruit);return list();}}

Fortsæt med trin 3.

Trin #3:Konfiguration af mongoDb-databasen

Syntaksen samt standardkoden til konfiguration af mongoDb-databasen er som angivet nedenfor.

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

I vores tilfælde vil vi gøre brug af følgende kode til at konfigurere databasen.

# konfigurer mongoDB-klienten til et replikasæt med to nodesquarkus.mongodb.connection-string =mongodb://localhost:27017

Fortsæt med trin 4.

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

Det næste trin er at køre MongoDB-databasen, vi lige har oprettet. For at gøre dette skal du bruge koden nedenfor.

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

Fortsæt med trin 5.

Trin #5:Lav frontend

Nu hvor alt arbejdet i applikationens backend er udført, lad os tage et kig på koden, 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;@ApplicationScopedpublic class ReactiveFruitService {@InjectReactiveMongoClient mongoClient;public CompletionStage list(){return getCollection().find().map(doc -> {Fruit fruit =new Fruit();fruit.setName(doc.getString("navn"));fruit.setDescription(doc.getString("description"));retur fruit;}).toList().run( );}public CompletionStage add(Fruit fruit){Document document =new Document().append("navn", fruit.getName()).append("description", fruit.getDescription());return getCollection(). insertOne(document);}privat ReactiveMongoCollection getCollection(){retur mongoClient.getDatabase("fruit").getCollection("fruit");}}pakke 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)publication klasse ReactiveFruitResource {@Inject ReactiveFruitService fruitService;@GETpublic CompletionStage list() {return fruitService.list();}@POSTpublic CompletionStage add(Fruit fruit) {fruitService.add(fruit);return list(); }}

I ovenstående eksempel gør vi brug af en reaktiv mongoDb-klient for at lette dannelsen af ​​frontend.

Fortsæt med trin 6.

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

For at gøre dette skal du bruge koden nedenfor.

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 {private final Codec documentCodec;public Fruitis.() 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 dokument) {if (!documentHasId(dokument)) {document.setId(UUID.randomUUID().toString());}returdokument;}@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 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"));retur frugt;}}

Nu vil vi gøre brug af en CodecProvider til at linke dette til Fruit-klassen, der allerede er til stede.

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;public class FruitCodecProvider implementerer CodecProvider {@Overridepublic Codec get(Class clazz, CodecRegistry registry) {if (clazz ==Fruit.class) {return (Codec) new FruitCodec();}return null;} /pre> 

Fortsæt med trin 7.

Trin #7:Endelig kode

Den endelige kode for denne applikation vil se nogenlunde 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;@ApplicationScopedpublic class CodecFruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>();MongoCursor cursor =getCollection( ).find().iterator();prøv {mens (cursor.hasNext()) {list.add(cursor.next());}} til sidst {cursor.close();}returliste;}offentlig ugyldig tilføjelse (Fruit fruit){getCollection().insertOne(fruit);}privat MongoCollection getCollection(){retur 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 den samme i dit system til forskellige formål. Læs videre for at vide mere.

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

Kommende batches til MongoDB-certificeringskursus
Kursusnavn Dato
MongoDB-certificeringskursus

Undervisningen starter den 4. juni 2022

4. juni

SAT&SUN (Weekend Batch)
Se detaljer
MongoDB-certificeringskursus

Undervisningen starter den 6. august 2022

6. august

SAT&SUN (Weekend Batch)
Se detaljer

  1. WebSocket-forbindelse til <URL> mislykkedes:Fejl under WebSocket-håndtryk:Uventet svarkode:521

  2. Er der en konvention om navneindsamling i MongoDB?

  3. Find ud af, om en forespørgsel bruger et indeks i MongoDB

  4. Django REST framework reagerer stadig med cachelagrede data, selv efter at have tomme redis nøgler