sql >> Database >  >> NoSQL >> MongoDB

Alles wat u moet weten over MongoDB Client

Als je al een tijdje een relationeel databasebeheersysteem gebruikt, ben je waarschijnlijk de naam MongoDB tegengekomen. 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 die op de markt aanwezig zijn, is het grote aantal cijfers en de grote veelzijdigheid die het met zich meebrengt. Het gebruik van MongoDB elimineert veel behoeften, waaronder de noodzaak om een ​​database aan te maken en het gegevenstype te definiëren telkens wanneer een nieuw project wordt gestart. Agenda van het MongoDB-klantartikel:

  • Vereisten voor MongoDB Client
  • Het project op Maven maken
  • Uw allereerste JSON-rustservice toevoegen
  • De MongoDB-database configureren
  • De geconfigureerde MongoDB-database uitvoeren
  • De voorkant maken
  • De MongoDB-client vereenvoudigen met BSON-codec
  • Definitieve code

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 je eerst aan de volgende vereisten voldoen.

Heb al een IDE in uw systeem.
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. Na uitvoering kan de gebruiker eenvoudig gegevens en elementen toevoegen aan een lijst, waarna deze automatisch wordt bijgewerkt in de database.

Daarnaast hebben we ervoor gezorgd dat alle communicatie tussen de gegevens en de server in JSON is 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 gebruik hiervoor de volgende code.


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 de bovenstaande opdracht uitvoert, importeert de IDE zowel de JSON-B-, MongoDb- als RESTEasy/JAX-RS-clients op uw systeem.

Verder gaan met stap 2.

Stap #2:Uw allereerste JSON-rustservice toevoegen


In order to do this, use the code below.

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;
}

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 Fruit 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 de onderstaande code.


package 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
public 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("name"));
fruit.setDescription(document.getString("description"));
list.add(fruit);
}
} finally {
cursor.close();
}
return list;
}

public void add(Fruit fruit){
Document document = new Document()
.append("name", fruit.getName())
.append("description", fruit.getDescription());
getCollection().insertOne(document);
}

private MongoCollection getCollection(){
return mongoClient.getDatabase("fruit").getCollection("fruit");
}
}

Now we need to edit the org.acme.rest.json.FruitResource class to suit our needs. In order to do this, use the code below.

@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);
return list();
}
}

Verder gaan met stap 3.

Stap #3:De mongoDb-database configureren

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


# configure the mongoDB client for a replica set of two nodes
quarkus.mongodb.connection-string = mongodb://mongo1:27017,mongo2:27017

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


# configure the mongoDB client for a replica set of two nodes
quarkus.mongodb.connection-string = mongodb://localhost:27017

Verder gaan 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. Gebruik hiervoor de onderstaande code.


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

Verder gaan met stap 5.

Stap #5:de voorkant maken

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


package 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> 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);
}

private ReactiveMongoCollection getCollection(){
return mongoClient.getDatabase("fruit").getCollection("fruit");
}
}

package org.acme.rest.json;

import javax.inject.Inject;
import javax.ws.rs.*;
import 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)
public class ReactiveFruitResource {

@Inject ReactiveFruitService fruitService;

@GET
public CompletionStage<List> list() {
return fruitService.list();
}

@POST
public CompletionStage<List> add(Fruit fruit) {
fruitService.add(fruit);
return list();
}
}

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

Verdergaan met stap 6.

Stap #6:de mongoDb-client vereenvoudigen met BSON-codec

Gebruik hiervoor de onderstaande code.


package 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 implements CollectibleCodec {

private final Codec documentCodec;

public FruitCodec() {
this.documentCodec = MongoClient.getDefaultCodecRegistry().get(Document.class);
}

@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());
}
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 = 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 gaan we een CodecProvider gebruiken om dit te koppelen aan de reeds aanwezige Fruit-klasse.


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

}

Verder gaan met stap 7.

Stap #7:definitieve code

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


package 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());
}
} finally {
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 je hoe je de MongoDB-client in je systeem moet configureren en gebruiken. Ga je gang en probeer deze codes in je systeem en laat ons je ervaringen weten.

Artikeloverzicht

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

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

Aankomende batches voor MongoDB-certificeringstraining
Cursusnaam Datum
MongoDB-certificeringstraining

Les begint op 4 juni 2022

4 juni

ZA&ZO (weekendbatch)
Details bekijken
MongoDB-certificeringstraining

Les begint op 6 augustus 2022

6 augustus

ZA&ZO (weekendbatch)
Details bekijken

  1. Variabelen gebruiken in MongoDB Map-reduce map-functie

  2. Redis:som van SCORES in gesorteerde set

  3. Installeer MongoDB op een Mac

  4. Mongoose.js instance.save() callback wordt niet geactiveerd