مقدمة في MongoDB: قاعدة بيانات المستندات
تعرفت في كورس SQL على قواعد البيانات التي تحفظ البيانات في جداول صارمة: أعمدة محددة مسبقاً، وكل صف يجب أن يلتزم بها. لكن ماذا لو كانت بياناتك متنوعة ومتغيرة؟ في هذا الدرس ستتعرف على MongoDB، قاعدة بيانات من نوع مختلف تخزن البيانات في مستندات مرنة.
ما هي NoSQL؟
Section titled “ما هي NoSQL؟”NoSQL اسم لعائلة من قواعد البيانات التي لا تعتمد على الجداول كطريقة أساسية للتخزين. والاسم يُفسَّر غالباً بأنه «Not Only SQL» أي «ليس SQL فقط».
ظهرت هذه القواعد لتناسب تطبيقات الإنترنت الحديثة: بيانات ضخمة، وتتغير بسرعة، وأشكالها غير ثابتة. و MongoDB أشهر قاعدة بيانات من هذا النوع، وظهرت عام 2009.
المستند بدلاً من الصف
Section titled “المستند بدلاً من الصف”في MongoDB تُحفظ البيانات في مستندات (Documents)، وكل مستند يشبه كائن JSON: أزواج من المفاتيح والقيم بين أقواس معقوفة:
{ "name": "منى", "age": 14, "city": "طنطا", "hobbies": ["القراءة", "الرسم"]}لاحظ شيئين مهمين:
- القيمة يمكن أن تكون قائمة مثل الهوايات، أو حتى مستنداً آخر بداخله. هذا صعب في الجداول التقليدية.
- لو تعلمت JavaScript أو Python، ستجد الشكل مألوفاً جداً: إنه مثل الكائن في JavaScript أو القاموس في Python.
المجموعات وقواعد البيانات
Section titled “المجموعات وقواعد البيانات”| في قواعد SQL | في MongoDB |
|---|---|
| قاعدة بيانات (Database) | قاعدة بيانات (Database) |
| جدول (Table) | مجموعة (Collection) |
| صف (Row) | مستند (Document) |
| عمود (Column) | حقل (Field) |
المجموعة (Collection) تضم مستندات من نفس النوع تقريباً، مثل مجموعة students. لكن على عكس الجدول، ليس شرطاً أن يكون لكل المستندات نفس الحقول:
{ "name": "علي", "age": 15 }{ "name": "سارة", "age": 13, "phone": "0100000000" }المستند الثاني فيه حقل phone غير موجود في الأول، وهذا مسموح تماماً.
تخيّل الجدول مثل استمارة رسمية مطبوعة: الخانات ثابتة للجميع. أما المستند فمثل ملف شخصي في مجلد: لكل شخص ملفه بالمعلومات التي تخصه، وقد يكون ملف أحدهم أطول من غيره.
متى تختار MongoDB؟
Section titled “متى تختار MongoDB؟”- البيانات متنوعة الشكل: مثل منتجات متجر، حيث للهاتف خصائص تختلف عن خصائص الكتاب.
- التطوير السريع: تستطيع إضافة حقول جديدة دون تعديل «هيكل» قاعدة البيانات.
- التطبيقات المبنية بـ JavaScript: شكل البيانات قريب من كائنات JavaScript، فيسهل التعامل معها.
ومتى تكون قواعد SQL أفضل؟ عندما تكون البيانات منظمة جداً، وبينها علاقات كثيرة ودقيقة، مثل الأنظمة المحاسبية والبنكية. لا توجد قاعدة أفضل مطلقاً، بل لكل نوع استخداماته.
أول عمليات في MongoDB
Section titled “أول عمليات في MongoDB”يمكنك التعامل مع MongoDB عبر أداة سطر الأوامر mongosh. هذا مثال لإضافة مستند والبحث عنه:
use school
db.students.insertOne({ name: "منى", age: 14, city: "طنطا" })use school: اختر قاعدة البياناتschool، وستُنشأ تلقائياً عند أول إضافة.db.students: المجموعةstudents، وهي أيضاً تُنشأ تلقائياً.insertOne: أضف مستنداً واحداً.
ستظهر رسالة تأكيد فيها معرّف المستند الجديد، شكلها تقريباً هكذا (المعرّف عندك سيختلف):
{ acknowledged: true, insertedId: ObjectId('...') }كل مستند يحصل تلقائياً على حقل خاص اسمه _id بقيمة فريدة، مثل رقم قومي لا يتكرر.
وللبحث:
db.students.find({ city: "طنطا" })هذا يعيد كل الطلاب الذين يسكنون في طنطا. لاحظ أن الشرط نفسه مكتوب كمستند! هذه فكرة متكررة في MongoDB.
جرّب بنفسك
Section titled “جرّب بنفسك”صمّم على الورق مستندات لـ ثلاثة منتجات في متجر إلكتروني بأشكال مختلفة:
- هاتف: الاسم، والسعر، والذاكرة، والألوان المتاحة (قائمة).
- كتاب: الاسم، والسعر، والمؤلف، وعدد الصفحات.
- قميص: الاسم، والسعر، والمقاسات المتاحة (قائمة).
لاحظ كيف تشترك المستندات الثلاثة في الاسم والسعر، بينما لكل منها حقول خاصة به. فكّر: كيف كنت ستصمم جدولاً واحداً في SQL يتسع لكل هذه المنتجات؟
أخطاء شائعة
Section titled “أخطاء شائعة”- الظن أن المرونة تعني الفوضى: حتى مع حرية الحقول، حافظ على أسماء حقول ثابتة ومنظمة.
nameفي مستند وNameفي آخر سيسبب لك مشكلات في البحث. - نسيان أن MongoDB حساسة لحالة الأحرف:
cityوCityحقلان مختلفان. - اختيار MongoDB لكل شيء: البيانات ذات العلاقات الكثيرة والدقيقة قد تناسبها قواعد SQL أكثر.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما الذي يقابل «الجدول» في MongoDB؟
الجدول يقابله المجموعة، والصف يقابله المستند، والعمود يقابله الحقل.
سؤال
أي عبارة صحيحة عن المستندات في نفس المجموعة؟
MongoDB مرنة: المستندات في نفس المجموعة يمكن أن تختلف حقولها، ويمكن أن تحتوي قوائم ومستندات متداخلة.
الخلاصة
Section titled “الخلاصة”- MongoDB قاعدة بيانات NoSQL تخزن البيانات في مستندات تشبه JSON.
- المستند أزواج مفاتيح وقيم، ويمكن أن يحتوي قوائم ومستندات متداخلة.
- المجموعة تقابل الجدول، والمستند يقابل الصف، والحقل يقابل العمود.
- المستندات في نفس المجموعة يمكن أن تختلف حقولها، ولكل مستند
_idفريد. insertOneللإضافة وfindللبحث، واختر MongoDB عندما تناسب بياناتك المرونة.