MongoDB 클라이언트에 대해 알아야 할 모든 것



이 기사는 MongoDB 클라이언트의 모든 기능과 사용에 대한 상세하고 포괄적 인 지식을 제공합니다.

지금까지 어떤 형태의 관계형 데이터베이스 관리 시스템을 사용했다면 아마도 다음과 같은 이름을 접했을 것입니다. . 2009 년에 처음 소개 된 mongoDb는 업계에서 가장 인기있는 관계형 데이터베이스 관리 시스템 중 하나입니다. 시장에 MySql과 같은 오래된 관계형 데이터베이스 소프트웨어 관리자가 있음에도 불구하고 미친 인기의 주된 이유는 테이블에 제공되는 다양한 숫자와 뛰어난 다양성 때문입니다. MongoDB를 사용하면 많은 요구 사항이 제거되며 그중 하나는 새 프로젝트가 시작될 때마다 데이터베이스를 만들고 데이터 유형을 정의해야한다는 것입니다. MongoDB 클라이언트 기사의 의제 :





그러나 MongoDB의 기능을 최대한 활용하려면 MongoDB 클라이언트에 대해 잘 알고 있어야하며이 기사에서는 이에 대해 설명합니다.

MongoDB 클라이언트의 전제 조건

이 문서를 완전히 작성하려면 먼저 다음 전제 조건을 충족해야합니다.



시스템에 이미 IDE가 있습니다.
JAVA_HOME이 올바르게 구성된 Java Development Kit 또는 JDK 버전 1.8 이상이 설치되었습니다.
Docker 또는 MongoDB가 설치되었습니다.
Apache Maven 버전 3.5.3 이상.

이 가이드에서 만들고 사용한 아키텍처는 가장 단순한 아키텍처 중 하나입니다. 실행되면 사용자는 목록에 데이터와 요소를 쉽게 추가 할 수 있으며 그 후에는 데이터베이스에서 자동으로 업데이트됩니다.

MongoDB 클라이언트 로고



이와 함께 데이터와 서버 간의 모든 통신이 JSON으로 이루어지고 모든 데이터가 MongoDB에 저장되도록했습니다.

시작하기

이 프로젝트를 시작하려면 아래에 설명 된 단계를 따르십시오.

1 단계 : Maven에서 프로젝트 만들기

첫 번째 단계는 항상 새 프로젝트를 생성하는 것이며이를 수행하려면 다음 코드를 사용하십시오.

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 '

위의 명령을 실행하면 IDE는 JSON-B, MongoDb 및 RESTEasy / JAX-RS 클라이언트를 시스템으로 가져옵니다.

2 단계로 넘어갑니다.

2 단계 : 첫 번째 JSON 휴식 서비스 추가

이렇게하려면 아래 코드를 사용하십시오. 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)}}

위의 예를 통해 나중에 프로그램에서 사용할 과일을 먼저 만들었습니다.

다음으로 애플리케이션의 사용자 계층이 될 org.acme.rest.json.FruitService 파일을 만들어야합니다. 이렇게하려면 아래 코드를 사용하십시오.

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 ()) {문서 문서 = cursor.next () 과일 과일 = 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'). getCol lection ( 'fruit')}} 이제 필요에 맞게 org.acme.rest.json.FruitResource 클래스를 편집해야합니다. 이렇게하려면 아래 코드를 사용하십시오. @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 (과일 과일) {fruitService.add (fruit) return list ()}}

3 단계로 넘어갑니다.

double을 int로 변환하는 방법

3 단계 : mongoDb 데이터베이스 구성

mongoDb 데이터베이스 구성을위한 구문 및 표준 코드는 다음과 같습니다.

# 두 노드의 복제본 세트에 대해 mongoDB 클라이언트를 구성합니다. quarkus.mongodb.connection-string = mongodb : // mongo1 : 27017, mongo2 : 27017

우리의 경우 다음 코드를 사용하여 데이터베이스를 구성합니다.

# 두 노드의 복제본 세트를 위해 mongoDB 클라이언트를 구성합니다. quarkus.mongodb.connection-string = mongodb : // localhost : 27017

4 단계로 넘어갑니다.

4 단계 : 구성된 MongoDB 데이터베이스 실행

다음 단계는 방금 만든 MongoDB 데이터베이스를 실행하는 것입니다. 이렇게하려면 아래 코드를 사용하십시오.

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

5 단계로 넘어갑니다.

5 단계 : 프런트 엔드 만들기

이제 애플리케이션의 백엔드에서 모든 작업이 완료되었으므로 애플리케이션의 프런트 엔드를 코딩하는 데 사용되는 코드를 살펴 보겠습니다.

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 () {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')}} 패키지 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) public class ReactiveFruitResource { @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}

위의 예에서 우리는 반응 형 mongoDb 클라이언트는 프런트 엔드의 형성을 용이하게합니다.

6 단계로 넘어갑니다.

6 단계 : BSON 코덱을 사용하여 mongoDb 클라이언트 단순화

이렇게하려면 아래 코드를 사용하십시오.

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 ( 과일 문서) {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}}

이제 CodecProvider를 사용하여 이미 존재하는 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는 CodecProvider {@Override public Codec get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) new FruitCodec ()} return null}}을 구현합니다.

7 단계로 넘어갑니다.

7 단계 : 최종 코드

이 애플리케이션의 최종 코드는 다음과 같습니다.

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

결론

이제 시스템에서 MongoDB 클라이언트를 구성하고 사용하는 방법을 알았습니다. 계속해서 시스템에서 이러한 코드를 시도하고 경험을 알려주십시오.

기사 요약

MongoDB 클라이언트에 대한 모든 정보와 다양한 용도로 시스템에서 동일하게 구성하는 방법에 대해 알아보십시오. 자세한 내용은 계속 읽으십시오.

이것으로 우리는 ' MongoDB 클라이언트 ' 조.