MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wszystko, co musisz wiedzieć o kliencie MongoDB

Jeżeli od jakiegoś czasu zajmujesz się jakąkolwiek formą systemu zarządzania relacyjnymi bazami danych, prawdopodobnie spotkałeś się z nazwą MongoDB. Wprowadzony po raz pierwszy w 2009 roku, dziś mongoDb jest jednym z najpopularniejszych systemów zarządzania relacyjnymi bazami danych w branży. Głównym powodem jego szalonej popularności pomimo obecności na rynku starszych menedżerów oprogramowania relacyjnych baz danych, takich jak MySql, jest duża liczba i duża wszechstronność, jaką wnosi do tabeli. Wykorzystanie MongoDB eliminuje wiele potrzeb, jedną z nich jest konieczność tworzenia bazy danych i definiowania typu danych przy każdym uruchomieniu nowego projektu. Agenda artykułu klienta MongoDB:

  • Wymagania wstępne dla klienta MongoDB
  • Tworzenie projektu na Maven
  • Dodanie swojej pierwszej usługi spoczynkowej JSON
  • Konfigurowanie bazy danych MongoDB
  • Uruchamianie skonfigurowanej bazy danych MongoDB
  • Tworzenie frontonu
  • Uproszczenie klienta MongoDB przy użyciu kodeka BSON
  • Kod końcowy

Ale aby osiągnąć maksymalną funkcjonalność z MongoDB, trzeba znać klienta MongoDB i w tym artykule właśnie to omówimy.

Wymagania wstępne klienta MongoDB

Aby ten artykuł był pełny, musisz najpierw spełnić następujące wymagania wstępne.

Miej już IDE w swoim systemie.
Java Development Kit lub JDK w wersji 1.8 i nowsze zainstalowane z poprawnie skonfigurowanym JAVA_HOME.
Zainstalowany Docker lub MongoDB.
Apache Maven w wersji 3.5.3 i nowszych.

Architektura, którą stworzyliśmy i wykorzystaliśmy w tym przewodniku, jest jedną z najprostszych. Po uruchomieniu użytkownik może łatwo dodać dane i elementy do listy, po czym zostaną one automatycznie zaktualizowane w bazie danych.

Wraz z tym upewniliśmy się, że cała komunikacja między danymi a serwerem odbywa się w formacie JSON, a wszystkie dane są przechowywane w MongoDB.

Pierwsze kroki

Aby rozpocząć ten projekt, wykonaj czynności opisane poniżej.

Krok 1:tworzenie projektu w Maven

Pierwszym krokiem jest zawsze utworzenie nowego projektu i w tym celu skorzystaj z następującego kodu.


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"

Po uruchomieniu powyższego polecenia IDE zaimportuje do systemu klientów JSON-B, MongoDb oraz RESTEasy/JAX-RS.

Kontynuuj krok 2.

Krok 2:Dodaj swoją pierwszą usługę spoczynkową JSON


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

W powyższym przykładzie najpierw stworzyliśmy owoc, który będzie później używany w programie.

Następnie musimy stworzyć plik org.acme.rest.json.FruitService, który będzie warstwą użytkownika naszej aplikacji. W tym celu użyj poniższego kodu.


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

Kontynuuj krok 3.

Krok 3:Konfiguracja bazy danych mongoDb

Składnia oraz standardowy kod do konfiguracji bazy danych mongoDb są podane poniżej.


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

W naszym przypadku użyjemy następującego kodu do konfiguracji bazy danych.


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

Kontynuuj krok 4.

Krok 4:Uruchamianie skonfigurowanej bazy danych MongoDB

Następnym krokiem jest uruchomienie właśnie utworzonej bazy danych MongoDB. Aby to zrobić, użyj poniższego kodu.


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

Kontynuuj krok 5.

Krok 5:Tworzenie frontendu

Teraz, gdy cała praca na zapleczu aplikacji została zakończona, przyjrzyjmy się kodowi używanemu do kodowania frontonu naszej aplikacji.


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

W powyższym przykładzie korzystamy z reaktywnego klienta mongoDb, aby ułatwić tworzenie interfejsu.

Przejdź do kroku 6.

Krok 6:Uproszczenie klienta mongoDb przy użyciu kodeka BSON

Aby to zrobić, użyj poniższego kodu.


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

Teraz użyjemy CodecProvider, aby połączyć to z już obecną klasą Fruit.


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

}

Przejdź do kroku 7.

Krok 7:Kod końcowy

Ostateczny kod tej aplikacji będzie wyglądał mniej więcej tak.


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

Wniosek

Teraz wiesz, jak skonfigurować i używać klienta MongoDB w swoim systemie. Śmiało wypróbuj te kody w swoim systemie i daj nam znać o swoich doświadczeniach.

Podsumowanie artykułu

Dowiedz się wszystkiego o kliencie MongoDB i o tym, jak możesz go skonfigurować w swoim systemie do różnych zastosowań. Czytaj dalej, aby dowiedzieć się więcej.

W ten sposób dochodzimy do końca Klient MongoDB artykuł.

Nadchodzące partie szkolenia certyfikacyjnego MongoDB
Nazwa kursu Data
Szkolenie certyfikacyjne MongoDB

Zajęcia zaczynają się 4 czerwca 2022

4 czerwca

SAT&SUN (partia weekendowa)
Wyświetl szczegóły
Szkolenie certyfikacyjne MongoDB

Zajęcia zaczynają się 6 sierpnia 2022

6 sierpnia

SAT&SUN (partia weekendowa)
Wyświetl szczegóły

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytania hierarchiczne z Mongo za pomocą $graphLookup

  2. Łączysz się z mongodb przez przeglądarkę?

  3. Aktualizowanie zagnieżdżonych tablic w mongoDB za pośrednictwem powłoki mongo

  4. Scal dwa pola tablicy w mongoDB

  5. Importuj więcej niż 1 plik json za pomocą mongoimport