sql >> Databasteknik >  >> NoSQL >> MongoDB

Allt du behöver veta om MongoDB Client

Om du har varit någon form av relationsdatabashanteringssystem under en tid nu, har du förmodligen stött på namnet MongoDB. MongoDb introducerades först år 2009 och är idag ett av de mest populära hanteringssystemen för relationsdatabas i branschen. Den främsta orsaken till dess vansinniga popularitet trots förekomsten av äldre relationsdatabasmjukvaruhanterare som MySql som finns på marknaden är den stora mängden siffror och den stora mångsidigheten den ger till bordet. Användningen av MongoDB eliminerar många behov, ett av dem är behovet av att skapa en databas och definiera datatypen varje gång ett nytt projekt startas. Agenda för MongoDB-klientartikeln:

  • Förutsättningar för MongoDB Client
  • Skapar projektet på Maven
  • Lägga till din allra första JSON-vilotjänst
  • Konfigurera MongoDB-databasen
  • Kör den konfigurerade MongoDB-databasen
  • Gör gränssnittet
  • Förenkla MongoDB-klienten med BSON-codec
  • Slutlig kod

Men för att uppnå maximal funktionalitet av 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-klient

För att den här artikeln ska vara fullständig måste du först uppfylla följande förutsättningar.

Ha en IDE som redan finns i ditt system.
Java Development Kit eller JDK version 1.8 och senare installerad med JAVA_HOME korrekt konfigurerad.
Docker eller MongoDB installerad.
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.

Tillsammans med detta har vi sett till att all kommunikation mellan data och server är i JSON och all data lagras i MongoDB.

Komma igång

Följ stegen nedan för att komma igång med det här projektet.

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 klienterna JSON-B, MongoDb samt RESTEasy/JAX-RS 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.package org.acme.rest.json;import java.util.Objects;public class Fruit {private String name;private String description;public Fruit() {}public Fruit (Strängnamn, Strängbeskrivning) {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);}}

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ändarskiktet 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.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();försök {while (cursor.hasNext()) {Dokumentdokument =cursor.next();Fruit fruit =new Fruit();fruit.setName(document .getString("namn"));fruit.setDescription(document.getString("description"));list.add(fruit);}} slutligen {cursor.close();}returlista;}public void add(Fruit) fruit){Dokumentdokument =nytt dokument().append("namn", fruit.getName()).append("description", fruit.getDescription());getCollection().insertOne(document);}privat MongoCollection getCollection (){return mongoClient.getDatabase("fruit").getCollection ("fruit");}}Nu måste vi redigera klassen org.acme.rest.json.FruitResource så att den passar 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;@GETpublic List list() {return fruitService.list();}@POSTpublic List add(Fruit fruit) {fruitService.add(fruit);return list();}}

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 av två nodesquarkus.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 av två nodesquarkus.mongodb.connection-string =mongodb://localhost:27017

Gå vidare med steg 4.

Steg #4:Kör den konfigurerade MongoDB-databasen

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

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

Gå vidare med steg 5.

Steg #5:Gör gränssnittet

Nu när allt arbete i applikationens backend är klart, låt oss ta en titt på koden som används för att koda frontänden 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;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("name"));fruit.setDescription(doc.getString("description"));retur fruit;}).toList().run( );}public CompletionStage add(Fruit fruit){Dokumentdokument =new Document().append("namn", fruit.getName()).append("description", fruit.getDescription());return getCollection(). insertOne(document);}privat ReactiveMongoCollection getCollection(){return mongoClient.getDatabase("fruit").getCollection("fruit");}}paketet 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 class ReactiveFruitResource {@Inject ReactiveFruitService fruitService;@GETpublic CompletionStage list() {return fruitService.list();}@POSTpublic CompletionStage add(Fruit fruit) {fruitService.add(fruit);return list(); }}

I exemplet ovan använder vi en reaktiv mongoDb-klient för att underlätta bildningen av gränssnittet.

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;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 implementerar CollectibleCodec {private final Codec documentCodec;public FruitisCodec() {th 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 generIdIfAbsentFromDocument(Fruit document) {if (!documentHasId(document)) {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("namn"));fruit.setDescription(document.getString("description"));retur fruit;}}

Nu kommer vi att använda en CodecProvider för att länka detta till Fruit-klassen som redan finns.

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

Gå vidare med steg 7.

Steg #7:Slutlig kod

Den slutliga koden för denna applikation kommer att se ut ungefär 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.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();försök {medan (cursor.hasNext()) {list.add(cursor.next());}} slutligen {cursor.close();}returlista;}public void lägg till (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. Varsågod och prova dessa koder i ditt system och låt oss veta din erfarenhet.

Artikelsammanfattning

Lär dig allt om MongoDB-klienten och hur du kan konfigurera densamma 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.

Kommande partier för MongoDB Certification Training Course
Kursnamn Datum
MongoDB-certifieringskurs

Klassen börjar den 4 juni 2022

4 juni

SAT&SUN (helgsats)
Visa detaljer
MongoDB-certifieringskurs

Klassen börjar den 6 augusti 2022

6 augusti

SAT&SUN (helgsats)
Visa detaljer

  1. Vilken, om någon, av NoSQL-databaserna kan ge ström av *ändringar* till en frågeresultatuppsättning?

  2. Hur använder man redis 'DUMP' och 'RESTORE' (offline)?

  3. Hur uppdaterar jag MongoDB-dokumentfält endast om de inte finns?

  4. MongoDB Aggregationsoperatörer för returdatumdelar