كل ما تحتاج لمعرفته حول عميل MongoDB



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن عميل MongoDB بكل ميزاته واستخداماته.

إذا كنت تستخدم أي شكل من أشكال نظام إدارة قواعد البيانات العلائقية لبعض الوقت الآن ، فمن المحتمل أن تكون قد صادفت اسم . تم تقديم mongoDb لأول مرة في عام 2009 ، وهو اليوم أحد أكثر أنظمة إدارة قواعد البيانات العلائقية شيوعًا في الصناعة. السبب الرئيسي وراء شعبيتها المجنونة على الرغم من وجود مديري برامج قواعد البيانات العلائقية الأقدم مثل MySql الموجود في السوق هو العدد الكبير والتنوع الكبير الذي يجلبه إلى الطاولة. يؤدي استخدام MongoDB إلى التخلص من العديد من الاحتياجات ، من بينها الحاجة إلى إنشاء قاعدة بيانات وتحديد نوع البيانات في كل مرة يتم فيها بدء مشروع جديد. أجندة مقالة عميل MongoDB:





ولكن لتحقيق أقصى قدر من الوظائف من MongoDB ، يحتاج المرء إلى أن يكون على دراية بعميل MongoDB وفي هذه المقالة ، سنناقش ذلك بالضبط.

المتطلبات الأساسية لعميل MongoDB

من أجل هذه المقالة بشكل كامل ، سوف تحتاج أولاً إلى تلبية المتطلبات الأساسية التالية.



اكتب التحويل c ++

لديك 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 = '/ ثمار '-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 (وصف السلسلة) {this.description = description}Override public قيمة منطقية تساوي (كائن obj) {if (! (obj exampleof 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.ListApplicationScoped public class FruitService {Inject MongoClient mongoClient القائمة العامة () {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} إضافة عامة باطلة (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 ('/ fruit')Produces (MediaType.APPLICATION_JSON)Consumes (MediaType.APPLICATION_JSON) فئة عامة FruitResource {Inject FruitService fruitServiceGET public List list () {return fruitService.list ()}POST public List add (فواكه) {FruitService.add (فاكهة) قائمة إرجاع ()}}

المضي قدما في الخطوة 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 التي أنشأناها للتو. للقيام بذلك ، استخدم الكود أدناه.

تشغيل docker -ti --rm -p 27017: 27017 mongo: 4.0.2

المضي قدما في الخطوة 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.concurrent.CompletionStageApplicationScoped 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 ()) تُرجع getCollection (). insertOne (document)} الخاص ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('فاكهة' ) .getCollection ('fruit')}} الحزمة org.acme.rest.json استيراد javax.inject.Inject import javax.ws.rs. * i mport javax.ws.rs.core.MediaType import java.util.List import java.util.concurrent.CompletionStagePath ('/ reactive_fruits')Produces (MediaType.APPLICATION_JSON)Consumes (MediaType.APPLICATION_JSON) public classs Reactive Inject ReactiveFruitService fruitServiceGET 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 public class FruitCodec تنفذ CollectibleCodec {private final Codec documentCodec public FruitCodec () {this.documentCodec = MongoClient.getDefaultCodec. )}Override public void encode (كاتب 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 generIdIfAbsentFromDocument (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) فاكهة الفاكهة = فاكهة جديدة () if (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (مستند .getString ('name')) fruit.setDescription (document.getString ('description')) return fruit}}

الآن سوف نستخدم CodecProvider لربط هذا بفئة الفاكهة الموجودة بالفعل.

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 class public ينفذ 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.ListApplicationScoped public class CodecFruitService {Inject MongoClient mongoClient قائمة القائمة العامة () {List list = new ArrayList () MongoCursor cursor = getCollection (). find (). iterator () try {while (cursor .hasNext ()) {list.add (cursor.next ())}} أخيرًا {cursor.close ()} return list} إضافة الفراغ العام (Fruit Fruit) {getCollection (). insertOne (fruit)} MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit'، Fruit.class)}}

خاتمة

أنت الآن تعرف كيفية تكوين واستخدام عميل MongoDB في نظامك. انطلق وجرب هذه الرموز في نظامك وأخبرنا بتجربتك.

ملخص المقال

تعرف على كل شيء عن عميل MongoDB وكيف يمكنك تكوينه في نظامك للاستخدامات المختلفة. تابع القراءة لمعرفة المزيد.

بهذا نصل إلى نهاية ' عميل MongoDB ' مقالة - سلعة.