انتقل إلى المحتوى

📁 الدليل الشامل لأساسيات MongoDB واختبار اختراق NoSQL

1. الهيكلة المعمارية (Architecture & Core Concepts)

تعمل قواعد بيانات NoSQL (مثل MongoDB) بفلسفة مختلفة تماماً عن SQL التقليدية. لا توجد جداول صلبة أو علاقات معقدة، بل مرونة تامة في تخزين البيانات.

  • قاعدة البيانات (Database): الحاوية الكبرى التي تضم كل شيء.

  • المجموعة (Collection): * الوظيفة: تعادل الجدول (Table) في SQL. تستخدم لتجميع البيانات ذات الصلة (مثل users أو products).

    • مرونة الهيكل (Schema-less): لا تشترط أن تكون كل البيانات بداخلها بنفس الهيكل. يمكنك وضع وثيقة تحتوي على 3 حقول بجوار وثيقة تحتوي على 10 حقول مختلفة تماماً في نفس الـ Collection.

    • الإنشاء التلقائي (Auto-Creation): تُنشأ المجموعة برمجياً بمجرد إدخال أول بيانات فيها دون الحاجة لأمر إنشاء صريح مسبق.

  • الوثيقة (Document):

    • الوظيفة: تعادل الصف (Row) في SQL.

    • التنسيق: تُخزن البيانات بصيغة BSON (وهي نسخة ثنائية Binary من الـ JSON)، وتتكون من مفتاح وقيمة {"Key": "Value"}.

    • المعرف الفريد (_id): كل وثيقة يتم إنشاؤها تحصل تلقائياً على حقل إجباري يسمى _id لتمييزها عن باقي الوثائق، ولا يمكن تكراره.

2. العمليات الأساسية بالتفصيل (CRUD Operations)

أ. عملية الإنشاء (Create)

إضافة بيانات جديدة إلى الـ Collection.

  • insertOne(document): لإضافة وثيقة واحدة.

    JavaScript

    db.users.insertOne({ "username": "marwan", "role": "admin" })

  • insertMany([document1, document2]): لإضافة عدة وثائق في نفس الوقت باستخدام مصفوفة [].

    JavaScript

    db.users.insertMany([ { "username": "ahmed", "role": "user" }, { "username": "guest", "role": "guest" } ])

ب. عملية القراءة والاستخراج (Read)

البحث عن البيانات وفلترتها.

  • find(query, projection): تُرجع كل الوثائق التي تطابق شرط البحث.

    • استخراج كل شيء: db.users.find() (تعادل SELECT *).

    • استخراج بشرط: db.users.find({ "role": "admin" })

  • findOne(query, projection): تُرجع أول وثيقة فقط تطابق الشرط.

  • الـ Projection (تحديد الحقول المعروضة): يُكتب كمعامل ثاني للتحكم في شكل المخرجات (إخفاء وإظهار حقول محددة لتقليل حجم البيانات المسترجعة).

    • 1 للإظهار، 0 للإخفاء.

    • يمنع استخدام 0 و 1 معاً لنفس الاستعلام إلا مع حقل _id.

    • مثال سليم: db.users.find({}, { "username": 1, "_id": 0 }) (أظهر اليوزرنيم فقط وأخفِ الـ ID).

    • مثال خاطئ: db.users.find({}, { "username": 1, "role": 0 }) (سيُصدر خطأ برمجي).

ج. عملية التحديث (Update)

تعديل بيانات موجودة بالفعل، وتتطلب المعاملات الخاصة بالتعديل ($set, $inc وغيرها).

  • updateOne(query, update, options): تُعدل أول وثيقة تطابق الفلتر.

    JavaScript

    // تعديل صلاحية المستخدم marwan db.users.updateOne({ "username": "marwan" }, { $set: { "role": "superadmin" } })

  • updateMany(query, update, options): تُعدل كل الوثائق التي تطابق الفلتر.

  • خاصية الـ Upsert: تُمرر كخيار ثالث { upsert: true }. إذا تطابق الفلتر مع بيانات موجودة سيتم التحديث، وإذا لم يتطابق سيتم أخذ البيانات الممررة وإنشاء وثيقة جديدة تماماً بها.

    JavaScript

    db.users.updateOne({ "username": "new_user" }, { $set: { "age": 25 } }, { upsert: true })

د. عملية الحذف (Delete)

إزالة وثائق من المجموعة.

  • deleteOne(query): تحذف أول وثيقة تطابق الشرط.

  • deleteMany(query): تحذف كل الوثائق التي تطابق الشرط.

    • ⚠️ خطر أمني: إرسال استعلام حذف فارغ db.users.deleteMany({}) يمسح جميع بيانات المجموعة ويسبب فقدان تام للبيانات (Data Loss).

3. المعاملات الشرطية (Operators) - الترسانة الأهم!

لفلترة البيانات وبناء استعلامات معقدة، نستخدم الـ Operators التي تبدأ دائماً بـ $.

1. معاملات المقارنة (Comparison):

  • $eq (Equal): يساوي. {"age": {"$eq": 20}}

  • $ne (Not Equal): لا يساوي. {"username": {"$ne": "admin"}}

  • $gt (Greater Than): أكبر من.

  • $lt (Less Than): أصغر من.

  • $in (In Array): يبحث إذا كانت القيمة موجودة داخل مصفوفة خيارات.

2. معاملات التعديل (Update Operators):

  • $set: استبدال قيمة أو إنشاء حقل جديد وتعيين قيمته.

  • $inc: زيادة أو نقصان قيمة رقمية بمقدار محدد (مثال: {"$inc": {"failed_logins": 1}}).

  • $unset: حذف حقل معين بالكامل من الوثيقة.

3. معاملات خطيرة (Evaluation Operators):

  • $regex: للبحث بالنصوص باستخدام التعبيرات النمطية (Regular Expressions).

  • $where: يسمح بتنفيذ دوال JavaScript بالكامل داخل محرك البحث الخاص بقاعدة البيانات.