ทุกสิ่งที่คุณต้องการรู้เกี่ยวกับลูกค้า MongoDB



บทความนี้จะให้ความรู้เกี่ยวกับ MongoDB Client โดยละเอียดและครอบคลุมพร้อมคุณสมบัติและการใช้งานทั้งหมด

หากคุณเคยเป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์รูปแบบใด ๆ มาระยะหนึ่งแล้วคุณอาจเจอชื่อของ . เปิดตัวครั้งแรกในปี 2552 ปัจจุบัน mongoDb เป็นหนึ่งในระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่ได้รับความนิยมมากที่สุดในอุตสาหกรรม เหตุผลหลักที่อยู่เบื้องหลังความนิยมอย่างบ้าคลั่งแม้ว่าจะมีผู้จัดการซอฟต์แวร์ฐานข้อมูลเชิงสัมพันธ์รุ่นเก่าเช่น MySql อยู่ในตลาดก็คือจำนวนที่หลากหลายและความสามารถรอบด้านที่นำมาสู่ตาราง การใช้ MongoDB ช่วยขจัดความต้องการจำนวนมากโดยหนึ่งในนั้นคือความจำเป็นในการสร้างฐานข้อมูลและกำหนดประเภทข้อมูลทุกครั้งที่เริ่มโครงการใหม่ วาระของบทความไคลเอนต์ MongoDB:





แต่เพื่อให้ได้ฟังก์ชันการทำงานสูงสุดจาก MongoDB เราต้องทำความคุ้นเคยกับไคลเอนต์ MongoDB และในบทความนี้เราจะพูดถึงเรื่องนั้น

ข้อกำหนดเบื้องต้นสำหรับ MongoDB Client

เพื่อให้บทความนี้สมบูรณ์ก่อนอื่นคุณจะต้องปฏิบัติตามข้อกำหนดเบื้องต้นต่อไปนี้



มี IDE อยู่แล้วในระบบของคุณ
Java Development Kit หรือ JDK เวอร์ชัน 1.8 ขึ้นไปที่ติดตั้ง JAVA_HOME กำหนดค่าไว้อย่างเหมาะสม
ติดตั้ง 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 บูลีนเท่ากับ (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)}}

จากตัวอย่างข้างต้นเราได้สร้าง Fruit ขึ้นมาก่อนซึ่งจะใช้ในโปรแกรมในภายหลัง

ต่อไปเราต้องสร้างไฟล์ org.acme.rest.json.FruitService ซึ่งจะเป็นเลเยอร์ผู้ใช้ของแอปพลิเคชันของเรา ในการดำเนินการนี้ให้ใช้รหัสด้านล่าง

วิธีการแปลง double เป็น int ใน java
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 คลาสสาธารณะ FruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). find (). iterator ( ) ลองใช้ {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)} ส่วนตัว MongoCollection getCollection () {return mongoClient.getDatabase ('fruit') getCol lection ('fruit')}} ตอนนี้เราต้องแก้ไขคลาส org.acme.rest.json.FruitResource ให้เหมาะกับความต้องการของเรา ในการดำเนินการนี้ให้ใช้รหัสด้านล่าง @Path ('/ fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) คลาสสาธารณะ FruitResource {@Inject FruitService fruitService @GET public List list () {return fruitService.list ()} @POST public List add (ผลไม้ผลไม้) {fruitService.add (fruit) return list ()}}

ก้าวต่อไปด้วยขั้นตอนที่ 3

ขั้นตอนที่ # 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 ที่เราเพิ่งสร้างขึ้น ในการดำเนินการนี้ให้ใช้โค้ดด้านล่าง

นักเทียบท่าวิ่ง -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 นำเข้า java.util.concurrent.CompletionStage @ApplicationScoped คลาสสาธารณะ 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 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) คลาสสาธารณะ @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}

ในตัวอย่างข้างต้นเรากำลังใช้ประโยชน์จากไฟล์ ไคลเอนต์ mongoDb แบบปฏิกิริยาเพื่ออำนวยความสะดวกในการสร้างส่วนหน้า

ก้าวต่อไปด้วยขั้นตอนที่ 6

ขั้นตอนที่ # 6: การลดความซับซ้อนของไคลเอนต์ mongoDb โดยใช้ตัวแปลงสัญญาณ BSON

ในการดำเนินการนี้ให้ใช้โค้ดด้านล่าง

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 คลาสสาธารณะ FruitCodec ใช้ CollectibleCodec {private final Codec documentCodec public FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry () )} @Override การเข้ารหัสโมฆะสาธารณะ (นักเขียน BsonWriter, 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 creationIdIfAbsentFromDocument (Fruit document) {if (! documentHasId (document)) {document.setId ( UUID.randomUUID (). toString ())} ส่งคืนเอกสาร} @Override บูลีนสาธารณะ documentHasId ( เอกสารผลไม้) {return document.getId ()! = null} @Override public BsonValue getDocumentId (Fruit document) {return new BsonString (document.getId ())} @Override public Fruit decode (BsonReader reader, DecoderContext decoderContext) {เอกสารเอกสาร = documentCodec.decode (reader, decoderContext) Fruit fruit = new Fruit () if (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (document .getString ('ชื่อ')) fruit.setDescription (document.getString ('description')) ส่งคืนผลไม้}}

ตอนนี้เราจะใช้ 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 คลาสสาธารณะ 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 นำเข้า java.util.List @ApplicationScoped คลาสสาธารณะ CodecFruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). find (). iterator () ลอง {while (เคอร์เซอร์ .hasNext ()) {list.add (cursor.next ())}} ในที่สุด {cursor.close ()} return list} public void add (Fruit fruit) {getCollection (). insertOne (fruit)} private MongoCollection getCollection ( ) {กลับ mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}

สรุป

ตอนนี้คุณรู้วิธีกำหนดค่าและใช้ไคลเอนต์ MongoDB ในระบบของคุณแล้ว ลองใช้รหัสเหล่านี้ในระบบของคุณและแจ้งให้เราทราบถึงประสบการณ์ของคุณ

สรุปบทความ

เรียนรู้ทั้งหมดเกี่ยวกับไคลเอ็นต์ MongoDB และวิธีกำหนดค่าเดียวกันในระบบของคุณสำหรับการใช้งานที่หลากหลาย อ่านเพื่อทราบข้อมูลเพิ่มเติม

java วันที่ใหม่จากสตริง

ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของไฟล์ ' ลูกค้า MongoDB ' บทความ.