مقدمة
تُستخدم أنظمة قواعد البيانات مثل MongoDB عادةً مع تطبيق خارجي يتصل بخادم قاعدة البيانات ويُجري عمليات مثل قراءة البيانات ومعالجتها أو كتابة إدخالات جديدة. في مثل هذه الحالات، لا يكون التفاعل مباشرًا مع خادم قاعدة البيانات. قد يكون الوصول المباشر ضروريًا لإجراء مهام إدارية على قاعدة البيانات أو لتنفيذ استعلامات مخصصة.
هنا يأتي دور واجهة سطر أوامر MongoDB. تُعدّ واجهة سطر أوامر MongoDB وحدة تحكم تفاعلية تُتيح لك الاتصال بخادم قاعدة البيانات وتنفيذ الأوامر عليه، مما يسمح لك بإجراء مهام إدارية وقراءة البيانات وكتابتها ومعالجتها مباشرةً. تُمكّنك واجهة سطر أوامر MongoDB من الاتصال بقاعدة البيانات عبر سطر الأوامر والعمل معها بشكل تفاعلي من نافذة طرفية. كما تُتيح لك تشغيل البرامج النصية الخارجية لتنفيذ المهام المتكررة بسهولة أكبر.
في هذا الدرس، ستستخدم واجهة سطر الأوامر MongoDB للاتصال بقاعدة بيانات MongoDB والاستعلام عنها بشكل تفاعلي. كما ستستخدم نظام المساعدة المدمج وميزة الإكمال التلقائي المتوفرة في واجهة سطر الأوامر.
المتطلبات الأساسية
- خادم مزود بمستخدم عادي (ليس مستخدم الجذر) يتمتع بصلاحيات sudo وجدار حماية مُهيأ باستخدام UFW. تم التحقق من صحة هذا الدليل باستخدام خادم يعمل بنظام Ubuntu 20.04.
- تم تثبيت MongoDB على خادمك.
- يتم تأمين مثيل خادم MongoDB الخاص بك عن طريق تمكين المصادقة وإنشاء مستخدم إداري.
ملاحظة: تشير الدروس التعليمية ذات الصلة حول كيفية تهيئة الخادم، وتثبيت MongoDB، ثم تثبيته بشكل آمن، إلى نظام Ubuntu 20.04. يركز هذا الدرس التعليمي على MongoDB نفسه، وليس على نظام التشغيل الأساسي. طالما أن المصادقة مُفعّلة، فسيعمل بشكل عام مع أي تثبيت لـ MongoDB بغض النظر عن نظام التشغيل.
الخطوة 1 - الاتصال بخادم MongoDB
لفتح واجهة سطر أوامر MongoDB، شغّل الأمر mongo من موجه أوامر الخادم. بشكل افتراضي، يفتح الأمر mongo واجهة سطر أوامر تتصل بنسخة MongoDB المثبتة محليًا والتي تعمل على المنفذ 27017.
قم بتشغيل أمر mongo بدون أي معلمات إضافية:
mongo
يعرض هذا الأمر رسالة ترحيب تتضمن معلومات حول الخادم المتصل به، بالإضافة إلى إصدار MongoDB المُثبّت. يوضح المثال التالي خادم MongoDB يعمل على العنوان 127.0.0.1 (واجهة استرجاعية تمثل المضيف المحلي) على منفذ MongoDB الافتراضي (27017) والإصدار 4.4.6.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6حاول عرض جميع قواعد البيانات الموجودة على الخادم. بعد تنفيذ أمر سطر الأوامر، اكتب show dbs واضغط على مفتاح الإدخال (Enter).
show dbsبافتراض أنك اتبعت الدليل التمهيدي حول كيفية تأمين MongoDB، فلن يُظهر هذا الأمر أي نتائج. والسبب في ذلك هو أنه على الرغم من تشغيل خادم MongoDB وتمكن النظام من الاتصال به، إلا أنك لم تُقدّم أي معلومات مصادقة. ونتيجةً لذلك، لا تملك أي صلاحيات للوصول إلى أي من قواعد بيانات الخادم، ولن يُظهر الأمر `show dbs` أي نتائج.
للخروج، اكتب الأمر التالي:
exitتقوم واجهة Mongo البرمجية بطباعة رسالة وداع قصيرة ثم تعيدك إلى واجهة النظام:
Output
byeملاحظة: بدلاً من كتابة أمر الخروج، هناك طريقة بديلة لإغلاق الصدفة وهي الضغط على CTRL+C بدلاً من ذلك.
الآن، قم بتوصيل واجهة MongoDB بخادم قاعدة البيانات مرة أخرى، ولكن هذه المرة أدخل اسم المستخدم وكلمة المرور للتحقق من هويتك بشكل صحيح في مثيل MongoDB الخاص بك. للقيام بذلك، ستحتاج إلى إدخال معلمات إضافية في سطر الأوامر، كما في المثال التالي:
mongo -u AdminSammy -p --authenticationDatabase adminيتكون هذا الأمر من عدة أجزاء:
- -u: يحدد هذا الخيار اسم المستخدم المستخدم للمصادقة على خادم MongoDB.
- -p: يُخبر هذا الخيار واجهة MongoDB باستخدام كلمة مرور عند الاتصال بقاعدة البيانات. بعد الضغط على مفتاح الإدخال (Enter)، سيُطلب منك إدخال كلمة المرور في نافذة الطرفية.
- --authenticationDatabase: يحدد هذا الخيار قاعدة بيانات مصادقة المستخدم التي تقوم بتسجيل الدخول بها. عادةً ما تتم إدارة حسابات المسؤولين في قاعدة بيانات المسؤول، ولكن إذا كانت قاعدة بيانات مصادقة المستخدم لديك مختلفة، فأدخل قاعدة البيانات تلك بدلاً من قاعدة بيانات المسؤول.
ملاحظة: للاتصال بخادم MongoDB يعمل على جهاز آخر غير localhost، يمكنك إضافة علامة -h ثم عنوان IP الخاص بخادمك إلى أمر shell.
أدخل كلمة المرور التي تم تعيينها أثناء التثبيت وستتمكن من الوصول إلى واجهة سطر الأوامر مرة أخرى.
ثم قم بتشغيل أمر عرض قواعد البيانات مرة أخرى:
show dbs
هذه المرة، يُعيد الأمر قائمة بجميع قواعد البيانات الموجودة على النظام:
Output
admin 0.000GB
config 0.000GB
local 0.000GBلأنك مصادق عليك كمستخدم ذي امتيازات، فإن الصدفة تسمح لك بتنفيذ الأوامر على أي من قواعد البيانات هذه.
الآن وقد نجحت في الاتصال بخادم MongoDB باستخدام واجهة MongoDB، يمكنك الانتقال إلى تعلم كيفية تشغيل الأوامر في الواجهة.
الخطوة الثانية - تنفيذ الأوامر
على غرار واجهات سطر الأوامر الأخرى، تقبل واجهة MongoDB الأوامر وتُعيد النتائج المطلوبة إلى المخرجات القياسية. وكما ذُكر سابقًا، في واجهة MongoDB، تُكتب جميع الأوامر في سطر الأوامر، ويُشار إلى ذلك بعلامة أكبر من (>). يؤدي الضغط على مفتاح الإدخال (Enter) بعد الأمر إلى تنفيذه فورًا وإعادة مخرجاته إلى الشاشة.
تُنفَّذ معظم الأوامر في قاعدة بيانات MongoDB على قاعدة بيانات مُحدَّدة أو مجموعة قواعد بيانات. تُمثَّل قاعدة البيانات المُحدَّدة حاليًا بواسطة كائن db الذي يُمكن الوصول إليه عبر سطر الأوامر. يُمكنك معرفة قاعدة البيانات المُحدَّدة حاليًا بكتابة db في سطر الأوامر.
dbفي مثيل shell متصل حديثًا، تُسمى قاعدة البيانات المختارة دائمًا test:
Output
test
يمكنك استخدام قاعدة البيانات هذه بأمان لاختبار MongoDB وواجهة MongoDB. للتبديل إلى قاعدة بيانات أخرى، يمكنك تشغيل الأمر use متبوعًا باسم قاعدة البيانات الجديدة. جرّب التبديل إلى قاعدة بيانات باسم fruit:
use fruits
ستُعلمك واجهة سطر الأوامر بأنك تستخدم الآن قاعدة البيانات الجديدة:
Output
switched to db fruitsيمكنك التحقق من ذلك عن طريق كتابة db مرة أخرى للعثور على اسم قاعدة البيانات المحددة حاليًا:
dbهذه المرة، تعكس المخرجات قاعدة البيانات الجديدة:
Output
fruitsلاحظ أنك لم تُنشئ قاعدة بيانات الفواكه بشكل صريح. يسمح لك MongoDB بتنفيذ أوامر على قواعد البيانات والمجموعات غير الموجودة بعد. فهو يُنشئ هذه البنى فقط عند إدخال كائن فيها لأول مرة. حتى لو نجحت في تغيير قاعدة البيانات الحالية إلى الفواكه، فإن هذه القاعدة غير موجودة بعد.
جرّب إنشاء قاعدة البيانات هذه بإضافة كائن إليها. يوضح المثال التالي كيفية إضافة كائن إلى مجموعة في قاعدة البيانات تُسمى "تفاح". بإضافة هذا الكائن، تُنشئ العملية كلاً من قاعدة بيانات الفواكه ومجموعة التفاح.
اكتب السطر التالي في موجه أوامر MongoDB واضغط على مفتاح الإدخال (Enter). لاحظ اسم المجموعة المميز (apples):
db.apples.insert()
يؤدي الضغط على مفتاح الإدخال (Enter) بعد القوس المفتوح إلى فتح موجه أوامر متعدد الأسطر، مما يسمح لك بإدخال أوامر أطول في أكثر من سطر. لا يكتمل إدخال الأمر إلا بعد إدخال قوس الإغلاق. وحتى ذلك الحين، يتغير شكل موجه الأوامر من علامة أكبر من (>) إلى علامة الحذف (...).
لا تحتاج إلى تقسيم أوامر MongoDB إلى أسطر متعددة بهذه الطريقة، ولكن القيام بذلك يمكن أن يجعل الأوامر الطويلة أسهل في القراءة والفهم.
في السطر التالي، ضع الكائن بين قوسين معقوفين ({ و }). يحتوي هذا المستند النموذجي على حقل واحد وقيمة واحدة فقط:
{name: 'Red Delicious'}
عند الضغط على مفتاح الإدخال (Enter) مرة أخرى، سيظهر سطر آخر يتيح لك إضافة المزيد من معلمات الأمر، مثل مستندات أخرى أو أي مواصفات أخرى تسمح بها طريقة الإدراج في MongoDB. ولكن في هذا المثال، يمكنك إنهاء إدخالك وتنفيذ العملية بإدخال قوس إغلاق والضغط على مفتاح الإدخال (Enter).
في هذه المرة، يسجل برنامج Mongo shell نهاية أمر الإدراج وينفذ الأمر بأكمله.
Output
WriteResult({ "nInserted" : 1 })بعد إدراج هذا العنصر الجديد في قاعدة البيانات، ستتوفر كل من قاعدة بيانات الفواكه ومجموعة التفاح. تحقق من قائمة قواعد البيانات المتاحة باستخدام الأمر show dbs.
show dbs
ومرة أخرى، تُعيد قائمة بجميع قواعد البيانات المتاحة، ولكن هذه المرة تتضمن القائمة قاعدة بيانات الفواكه:
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GBيُعد الأمر show collections مفيدًا لاسترداد قائمة بالمجموعات في قاعدة البيانات المحددة حاليًا:
show collections
بما أنه تم تحديد قاعدة بيانات الفواكه، فسوف تُعيد فقط مجموعة التفاح التي تم إنشاؤها حديثًا:
Output
applesبهذا، تعلمت كيفية تنفيذ الأوامر في واجهة سطر أوامر MongoDB. كما أنشأت كائنًا، والذي بدوره أنشأ قاعدة بيانات جديدة ومجموعة بيانات جديدة موجودة الآن على الخادم.
في الخطوة الأخيرة من هذا الدليل، ستتعلم كيفية استدعاء ميزات مساعد MongoDB shell لفهم الأوامر بشكل أفضل وتنفيذها بسهولة أكبر.
الخطوة 3 - الحصول على مساعدة تفاعلية من سطر الأوامر
تحتوي واجهة MongoDB على نظام مساعدة مدمج يمكنك استخدامه للحصول على معلومات حول الأوامر المتاحة لنظام قاعدة البيانات والكائنات المخزنة فيه. يمكن عرض صفحة المساعدة التمهيدية هذه مباشرةً في موجه الأوامر باستخدام الأمر help.
help
تُعيد واجهة MongoDB قائمةً بإدخالات مساعدة أكثر تفصيلاً يمكنك استخدامها للحصول على مزيد من المعلومات حول أجزاء محددة من الواجهة، بالإضافة إلى بعض الأمثلة على الأوامر الأكثر استخدامًا:
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shellيُظهر السطران الأولان المظللان في مخرجات هذا المثال كيفية تشغيل الأمر المساعد لقاعدة البيانات الحالية ومجموعة بيانات فيها، على التوالي. اسم مجموعة البيانات في المثال هو mycoll، ولكن يمكن استخدام أي اسم مجموعة بيانات صالح.
السطر الأخير المظلل - db.mycoll.find() - هو مثال على طريقة لاسترجاع عنصر من مجموعة باستخدام الأمر find، الذي يسرد العناصر الموجودة في مجموعة معينة. وبما أن المجموعات من أكثر البنى استخدامًا في قاعدة بيانات Mongo، فسنتناول في هذه الخطوة كيفية استخدام دالتي find() و help() على مستوى المجموعة في Mongo.
أولاً، قم بالوصول إلى صفحة دليل حزمة Apple للعثور على الأوامر المتاحة لهذه الحزمة:
db.apples.help()
ملاحظة: على الرغم من أن أمر المساعدة الأصلي كان مجرد help، إلا أنه عند تنفيذ طريقة مساعدة على كائنات قاعدة البيانات والمجموعات، يجب عليك اتباع الأمر بزوج من الأقواس بحيث تتم قراءته على أنه help() وليس مجرد help.
ينتج عن هذا الأمر قائمة طويلة من الأوامر المتاحة التي يمكنك تنفيذها على مجموعة التفاح:
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .بالإضافة إلى قائمة واضحة بالأوامر المتاحة التي يمكنك تشغيلها في مجموعة db.apples (يتبع كل منها شرح موجز لما يفعله الأمر)، توفر صفحة الدليل هذه أيضًا أمثلة على استخدام الأوامر الشائعة الاستخدام مثل find().
يعمل نظام المساعدة المدمج هذا كمرجع سهل الاستخدام للأوامر المتاحة. يمكنك استخدامه للتحقق من صحة بناء الجملة إذا لم تتذكر التهجئة الدقيقة أو الأجزاء المقبولة من الأمر.
بما أنك تعلمت بالفعل من صفحات الدليل أنه يمكن استخدام find() لاسترداد الكائنات من مجموعة، يمكنك الآن استرداد الكائن الذي تم إنشاؤه في مجموعة apples في الخطوة السابقة.
مع ذلك، يُسلّط هذا المثال الضوء على ميزة أخرى تفاعلية مساعدة في MongoDB تُعرف باسم إكمال الأوامر. تتبع واجهة MongoDB النمط الموجود في واجهات سطر الأوامر الشائعة الأخرى مثل Bash أو zsh، حيث يؤدي الضغط على مفتاح TAB في لوحة المفاتيح إلى إكمال أي أمر تقوم بكتابته تلقائيًا.
ابدأ بكتابة ما يلي، ولكن لا تضغط على زر الإدخال (ENTER) بعد:
db.a
بدلاً من كتابة اسم المجموعة بالكامل، اضغط على مفتاح TAB في لوحة المفاتيح. ستعرض واجهة MongoDB قائمة بجميع الاحتمالات المتاحة، بدءًا بما يلي:
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(يسرد هذا الناتج ثلاثة أوامر، مشار إليها بأقواس مفتوحة، بالإضافة إلى مجموعة التفاح.
اكتب حرفًا آخر في نافذة الأوامر:
db.ap
اضغط على مفتاح TAB مرة أخرى. هذه المرة، لا يوجد خيار آخر للبدء بـ ap، وسيكمل موجه أوامر MongoDB الإدخال تلقائيًا ويكتب db.apples. اتبع نفس المبدأ وأكمل أمر find() باستخدام إكمال TAB. اكتب fi ولكن لا تضغط على مفتاح ENTER.
db.apples.fi
سيؤدي الضغط على مفتاح TAB إلى إكمال اسم الأمر تلقائيًا إلى db.apples.find. عند هذه النقطة، سيؤدي الضغط على مفتاح TAB مرة أخرى إلى عرض المزيد من الاحتمالات في نافذة الأوامر، ولكن يمكنك إضافة قوس إغلاق يدويًا لتنفيذ أمر البحث.
db.apples.find()
ستعرض نافذة الأوامر قائمة بجميع العناصر الموجودة في مجموعة التفاح. سيكون هناك عنصر واحد فقط، وهو العنصر الذي استوردته سابقًا:
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }نتيجة
ستعرّفك هذه المقالة على واجهة سطر أوامر MongoDB. تتيح لك هذه الواجهة إضافة كائنات جديدة إلى قاعدة البيانات، والاستعلام عن المجموعات الموجودة، وتنفيذ المهام الإدارية لإدارة قاعدة البيانات وبياناتها ومستخدميها.









