MongoDBクライアントについて知っておくべきことすべて



この記事では、MongoDBクライアントのすべての機能と使用法に関する詳細で包括的な知識を提供します。

しばらくの間、何らかの形のリレーショナルデータベース管理システムを使用している場合は、おそらく次の名前に出くわしたことでしょう。 。 2009年に最初に導入されたmongoDbは、今日、業界で最も人気のあるリレーショナルデータベース管理システムの1つです。 MySqlのような古いリレーショナルデータベースソフトウェアマネージャーが市場に存在しているにもかかわらず、その非常識な人気の背後にある主な理由は、それがテーブルにもたらす幅広い数と優れた多様性です。 MongoDBを使用すると、多くのニーズがなくなります。その1つは、データベースを作成し、新しいプロジェクトが開始されるたびにデータ型を定義する必要があることです。 MongoDBクライアント記事の議題:





ただし、MongoDBから最大の機能を実現するには、MongoDBクライアントに精通している必要があります。この記事では、それについて説明します。

MongoDBクライアントの前提条件

この記事を完全に読むには、最初に次の前提条件を満たしている必要があります。



システムにIDEがすでに存在している。
Java Development KitまたはJDKバージョン1.8以降が、JAVA_HOMEが正しく構成された状態でインストールされている。
DockerまたはMongoDBがインストールされています。
ApacheMavenバージョン3.5.3以降。

このガイドで作成して使用したアーキテクチャは、最も単純なものの1つです。実行すると、ユーザーはリストにデータと要素を簡単に追加できます。その後、データベースで自動的に更新されます。

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:最初のJSONRESTサービスを追加する

これを行うには、以下のコードを使用します。 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ファイルを作成する必要があります。これを行うには、以下のコードを使用します。

パッケージorg.acme.rest.jsonimport 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)}}最後に{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に進みます。

ステップ3:mongoDbデータベースの構成

mongoDbデータベースを構成するための構文と標準コードは次のとおりです。

#2つのノードのレプリカセット用にmongoDBクライアントを構成しますquarkus.mongodb.connection-string = mongodb:// mongo1:27017、mongo2:27017

この場合、次のコードを使用してデータベースを構成します。

#2つのノードのレプリカセット用にmongoDBクライアントを構成しますquarkus.mongodb.connection-string = mongodb:// localhost:27017

ステップ4に進みます。

ステップ4:構成済みのMongoDBデータベースを実行する

次のステップは、作成したばかりのMongoDBデータベースを実行することです。これを行うには、以下のコードを利用してください。

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

ステップ5に進みます。

ステップ5:フロントエンドを作成する

アプリケーションのバックエンドでのすべての作業が完了したので、アプリケーションのフロントエンドのコーディングに使用されるコードを見てみましょう。

パッケージorg.acme.rest.jsonimport 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')}} package org.acme.rest.json import javax.inject.Inject importjavax.ws.rs。* i mport javax.ws.rs.core.MediaType import java.util.List import java.util.concurrent.CompletionStage @Path( '/ react_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クライアントを簡素化する

これを行うには、以下のコードを利用してください。

オブジェクトのJava配列の例
パッケージorg.acme.rest.json.codecimport com.mongodb.MongoClient import org.acme.rest.json.Fruit importorg.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 FruitCodecimplements CollectibleCodec {private final Codec documentCodec public FruitCodec(){this.documentCodec = MongoClient.getDefaultCodecRegistry()。get(Document.class )} @Override public void encode(BsonWriter writer、Fruit Fruit、EncoderContext encodeContext){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 decodeContext){Document document = documentCodec.decode(reader、decoderContext)フルーツフルーツ= 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クラスにリンクします。

パッケージorg.acme.rest.json.codecimport 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を実装します{@Overridepublic Codec get(Class clazz、CodecRegistry Registry){if(clazz == Fruit.class){return(Codec)new FruitCodec()} return null}}

手順7に進みます。

ステップ7:最終コード

このアプリケーションの最終的なコードは、次のようになります。

パッケージorg.acme.rest.jsonimport 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())}}最終的に{cursor.close()}リターンリスト} public void add(Fruit Fruit){getCollection()。insertOne(fruit)} private MongoCollection getCollection( ){return mongoClient.getDatabase( 'fruit')。getCollection( 'fruit'、Fruit.class)}}

結論

これで、システムでMongoDBクライアントを構成して使用する方法がわかりました。先に進んで、システムでこれらのコードを試して、あなたの経験を知らせてください。

記事の概要

MongoDBクライアントのすべてと、さまざまな用途のためにシステムで同じものを構成する方法について説明します。詳細については、以下をお読みください。

これで、終わりになります 「」 MongoDBクライアント 「」 論文。