طرق الاتصال بخادم MongoDB


طرق الاتصال بخادم MongoDB August 15, 2025 at 07:06PM

سنناقش بهذا المقال الخيارات المتنوعة للاتصال بخادم MongoDB، سواءً كان يتضمن قاعدة بيانات وحيدة، أو عدة قواعد بيانات تتمتع كل منها بمَنْفَذٍ خاص. سنعرض أيضًا طريقة الاتصال مع خوادم تعمل على أجهزة متعددة ضمن أمر اتصال واحد، لكن البداية ستكون من تشغيل خادم MongoDB.

تشغيل خادم MongoDB

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

يمكن الاتصال مع خادم MongoDB بواسطة الصدفة MongoDB Shell، وعند بدء التشغيل سيكون المنفذ 27017 هو المنفذ الافتراضي للاتصال بخادم MongoDB؛ أما إذا أردنا الوصول إلى الخادم من واجهة الويب فيمكننا ذلك باستخدام المنفذ الناتج عن إضافة 1000 إلى رقم منفذ بدء التشغيل، فنكتب عندها الرابط http://localhost:28017 في متصفحنا.

الاتصال بخادم MongoDB من الصدفة Shell

يبين السطر أبسط صيغة لكتابة أمر الاتصال مع خادم MongoDB بعد أن شغلناه، علمًا أننا اكتفينا بخيار واحد فقط من خيارات الاتصال المتعددة، وهو خيار لا غنى عنه؛ إذ إنه يشير إلى اسم الحاسوب المضيف hostname، وهو في حالتنا localhost:

mongodb://localhost

وبمجرد تنفيذ الأمر سنحصل على الخرج التالي:

img01 mongodb connect

إذا عُدنا الآن إلى نافذة موجه الأوامر التي شغلنا فيها خادم MongoDB، وهو نفسه الملف التنفيذي mongod، سنجد أنها تتضمن خرجًا يشبه التالي:

img02 mongodb server

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

ملاحظة: سيظهر هذا السطر عندما ينجح اتصالنا مع الخادم

صيغ متنوعة لأمر الاتصال مع خادم MongoDB

يمكن ذكر الصيغ الآتية لأوامر الاتصال مع خادم MongoDB

الاتصال بقاعدة البيانات الافتراضية باستخدام اسم مستخدم وكلمة مرور

يمكننا الاتصال مع خادم MongoDB بواسطة اسم مستخدم وكلمة مرور محددين وفق الصيغة العامة username@hostname/dbname، بحيث نعدل اسم المستخدم username إلى اسم المستخدم الذي نود الاتصال بواسطته مع كلمة المرور الخاصة به، كما نبدل اسم الحاسوب المضيف hostname إلى اسم الحاسوب المضيف الفعلي، و dbname إلى اسم قاعدة البيانات؛ وإذا أردنا الاتصال بقاعدة البيانات الافتراضية، يكفي أن نترك اسم قاعدة البيانات فارغ، كما هو الحال في المثال التالي:

mongodb://mongo_admin:AxB6_w3r@localhost/

ولتوضيح الشيفرة أعلاه، يشير mongo_admin إلى اسم المستخدم، و AxB6_w3r إلى كلمة المرور الخاصة به؛ وهو يحاول الاتصال بقاعدة البيانات الافتراضية الموجودة على الحاسوب المحلي localhost.

وسيكون الخرج كما يلي:

img03 mongodb connect to default database

الاتصال بقاعدة بيانات معينة باستخدام اسم مستخدم وكلمة مرور

سنستخدم الصيغة العامة السابقة نفسها username@hostname/dbname مع تعديل كلمة dbname إلى اسم قاعدة البيانات التي نريد بالاتصال بها، وفق التالي:

mongodb://mongo_admin:AxB6_w3r@localhost/w3r

وباستخدام هذا الأمر سيتصل المستخدم mongo_admin صاحب كلمة المرور AxB6_w3r بقاعدة البيانات w3r الموجودة على الحاسوب المحلي، وسيكون الخرج كما يلي:

img04 mongodb connect with username and password

وتجدر الإشارة هنا إلى أننا تستطيع الاتصال بأكثر من مُضيف hostname ضمن أمر اتصال واحد.

الاتصال بقاعدة بيانات معينة باستخدام اسم مستخدم وكلمة مرور ومَنفَذ معين

يجري هذا الاتصال بطريقة مشابهة للسابق، بحيث نستخدم الصيغة username@hostname/dbname ونضع اسم المستخدم وكلمة المرور؛ وبدلًا من dbname، نكتب اسم قاعدة البيانات التي نريد الاتصال بها، يتبعها رقم المَنفَذ port الذي حددناه للاتصال معها، كما هو الحال في المثال التالي:

mongodb://mongo_admin:AxB6_w3r@localhost/w3r:29000

بمعنى أن المستخدم mongo_admin الذي كلمة مروره AxB6_w3r سيحاول الاتصال بقاعدة البيانات w3r الموجودة على الحاسوب المحلي، وذلك عبر المنفذ 29000. وفي الحالات التي لا نذكر فيها رقم منفذ محدد، سيجري الاتصال عبر المنفذ الافتراضي 27107، بحيث سيكون خرج الأمر كما يلي:

img05 mongodb connect to database specific port

الاتصال بخوادم MongoDB متعددة تعمل على أجهزة متعددة

تعمل حالة الاتصال بخوادم MongoDB على أجهزة متعددة عند استخدام مجموعات النسخ المتماثلة replica sets، التي تتألف من عدة عقد تُعدّ نسخًا متطابقة عن بعضها؛ إذ تكتشف المجموعة العقدة الرئيسية Master node تلقائيًا وفي حال فشلت، فإن العقد الثانوية تنوب عنها، وتساعدنا على استرداد النظام من حالات الفشل.

في المثال التالي صيغة الأمر المناسب لهذا النوع من الاتصال:

mongodb://example_host1.com:27017,example_host2.com:27017

الاتصال بخوادم MongoDB متعددة تعمل على الجهاز نفسه ولكل منها منفذ خاص

سنستخدم الأمر التالي للاتصال بخوادم MongoDB المتعددة التي تعمل على الجهاز نفسه، لكن على منافذ ports مختلفة. سيفيدنا هذا أيضًا في مجموعات النسخ المتماثلة replica sets:

mongodb://example_host1.com:27110,example_host1.com:27111

الخيارات المرتبطة بالصيغ السابقة

يبين الجدول التالي الخيارات التي يمكننا استخدامها مع صيغ أوامر الاتصال السابقة:

الخيار Option الوصف
replicaSet=name عند العمل مع أي لغة برمجة يدعمها MongoDB فإن مُشَغِّل driver لهذه اللغة سيستخدم اسم مجموعة النسخ المتماثلة ليعرف العقد التي تنتمي إليها؛ علمًا أن مُشَغِّل لغة البرمجة أو driver هو جزء التعليمات البرمجية المسؤول عن الاتصال بين لغة برمجة التطبيق ونظام MongoDB.
slaveOk=true|false‎ يستخدم هذا الخيار للتعامل مع حالتي الكتابة والقراءة في أنظمة النسخ المتماثلة ذات الخوادم المتعددة، فعند الكتابة تُرسل البيانات إلى الخادم الرئيسي primary وعند القراءة تُرسل البيانات إلى جميع الخوادم الاحتياطية أو الثانوية slaves.
safe=true|false إذا كانت قيمة safe هي true، فإن مُشَغِّل لغة البرمجة سيُرسل الأمر getLastError بعد تحديث للبيانات ليتأكد من إتمامه بدون أخطاء؛ أما إذا كانت قيمته false، فلن يُرسل المشغل getLastError بعد التحديثات.
w=n يُضاف { w : n } إلى الأمر getLastError الذي يرسله مُشَغِّل لغة البرمجة، وهو يفرض بطبيعة الحال إسناد القيمة true للخيار safe=true.
wtimeoutMS=ms يُضاف { wtimeout : ms } إلى الأمر getLastError الذي يرسله مُشَغِّل لغة البرمجة، وهو يعني حكمًا أن safe=true.
fsync=true|false إذا كانت قيمة هذا الخيار هي true، فسيُضاف الخيار { wtimeout : ms } إلى الأمر getLastError الذي يُرسله مُشَغِّل لغة البرمجة، وهذا يفرض بالطبع أن تكون safe=true؛ أما إذا أعطينا fsync القيمة false، فإن الأمر getLastError لن يُرسل أبدًا.
journal=true|false إذا أُعطيت القيمة true لهذا الخيار فستجري مزامنة مع يومية قاعدة البيانات journal التي تتضمن عادةً إدخالات قاعدة البيانات التي لم تُثَبَّت بعد uncommitted، وهذه الحالة تفرض دائمًا إسناد القيمة true للخيار safe=true.
connectTimeoutMS=ms يُحدد الزمن الأقصى لمحاولة الاتصال مع خادم MongoDB قبل تصنيفه على أنه اتصال غير ممكن.
socketTimeoutMS=ms يحدد الزمن الأقصى لمحاولة الإرسال أو الاستقبال على مِقبس التوصيل socket قبل إنهاء المحاولة.

خاتمة

تعرفنا في هذا المقال على الطرق المتنوعة للاتصال مع خادم MongoDB عبر الصدفة mongo shell. وسواءٌ كان ذلك على مُضيف واحد أو على مضيفين متعددين، يرتكز الاتصال على تحديد أربع أمور أساسية هي بيانات المستخدم الذي سيُنجِز الاتصال، واسم قاعدة البيانات، والمَنْفَذ الخاص بها، واسم المُضيف؛ ويمكننا استخدام الخيارات التي عرضناها في الجدول حسب ما تقتضيه طبيعة مشروعنا.

ترجمة -وبتصرف- لمقال MongoDB connections من موقع w3resource.

اقرأ أيضًا

#3qpa7meed #ArabProgrammers #المبرمجون_العرب #arab_programmers #عقبة_البرق

تعليقات