شرح MongoDB Atlas للمبتدئين خطوة بخطوة

في المقال اللي فات اتكلمنا عن Node.js وExpress.js وإزاي تبني بيهم سيرفر لتطبيقك. دلوقتي جه دور الحرف اللي بيسبقهم في اختصار MERN (MongoDB، Express، React، Node): قاعدة البيانات. من غير MongoDB، السيرفر اللي بنيته في المقال السابق مالوش مكان يخزن فيه بيانات المستخدمين أو أي حاجة تانية بشكل دائم.

لو لسه بتسمع عن الـ NoSQL وعايز تجرب MongoDB من غير ما تنزل أي برنامج على جهازك، MongoDB Atlas هو أسهل نقطة بداية. هو خدمة سحابية مجانية (لحد حجم معين) بتديك قاعدة بيانات جاهزة على الإنترنت في دقايق، من غير ما تحتاج تتعامل مع سيرفرات أو إعدادات معقدة. في المقال ده هناخد بالتفصيل من إنشاء الحساب لحد ما تكتب أول Query بنفسك وتوصلها بسيرفر الـ Node.js بتاعك.

المحتويات

أولاً: الـ NoSQL إيه ولية MongoDB Atlas بالذات

قواعد البيانات النوع NoSQL زي MongoDB بتخزن البيانات في شكل مستندات (documents) شبه ملفات JSON، مش في جداول وصفوف زي قواعد البيانات التقليدية (SQL). الفايدة إنك مش محتاج تحدد شكل ثابت للبيانات من الأول، كل مستند ممكن يكون شكله مختلف شوية عن التاني، وده بيريحك جدًا في مرحلة التطوير السريع أو لما البيانات نفسها بتتغير شكلها مع الوقت.

MongoDB Atlas هو النسخة السحابية الرسمية من MongoDB، بيدير السيرفرات والنسخ الاحتياطي والتحديثات نيابة عنك، وعنده باقة مجانية (اسمها M0) كافية جدًا للتعلم وبناء مشاريع صغيرة. بدل ما تثبت MongoDB على جهازك وتتعامل مع الإعدادات، بتفتح حساب وتاخد رابط اتصال جاهز تستخدمه في كودك على طول.

ثانياً: عمل حساب وإنشاء أول Cluster مجاني

ادخل على موقع MongoDB Atlas واعمل حساب بإيميلك أو بحساب Google. بعد التسجيل، هيطلب منك تعمل أول Project، ده مجرد اسم بتنظم بيه مشاريعك لو هتعمل أكتر من واحد بعدين. بعدها هيسألك تختار نوع الـ Cluster، اختار الخيار المجاني M0.

  • اختار أقرب منطقة سيرفر جغرافيًا ليك، عشان زمن الاستجابة يبقى أسرع.
  • هيطلب منك تعمل مستخدم لقاعدة البيانات (Database User) بيوزر وباسورد، ده مختلف عن حساب Atlas نفسه، ده بالذات اللي هتستخدمه في كودك.
  • هيطلب منك تحدد الأجهزة المسموح لها بالاتصال (Network Access)، وقت التطوير اختار خيار السماح لأي عنوان (0.0.0.0/0) عشان تسهل عليك، وهنرجعله تاني في قسم الحماية آخر المقال.

بعد ما الـ Cluster يخلص إعداده (بياخد كذا دقيقة)، هتلاقي زرار Connect جنبه، دوس عليه وهيديك رابط الاتصال (Connection String) اللي هتحتاجه في الخطوة الجاية.

ثالثاً: الاتصال بقاعدة البيانات من الكود

هنستخدم نفس مشروع Node.js وExpress اللي بنيناه في المقال السابق، ونضيفله مكتبة mongodb الرسمية. أول حاجة ثبت المكتبة في نفس المشروع، وبعدين استخدم رابط الاتصال اللي أخدته من الخطوة اللي فاتت.

const { MongoClient } = require("mongodb");

const uri = "mongodb+srv://<username>:<password>@cluster0.xxxxx.mongodb.net/?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function connectDB() {
  try {
    await client.connect();
    console.log("اتصلنا بقاعدة البيانات بنجاح");
  } catch (err) {
    console.error("فشل الاتصال:", err);
  }
}

connectDB();

استبدل <username> و<password> باليوزر والباسورد اللي عملتهم في الخطوة اللي فاتت. لو الباسورد فيه رموز خاصة زي @ أو #، محتاج تعمل لها URL encoding وإلا رابط الاتصال هيفشل.

لو مش متعود على الـ async/await وإزاي بتشتغل، شرحتها بالتفصيل في كورس الـ JavaScript، يفضل تراجعه قبل ما تكمل لو مش واثق منها.

رابعاً: أول عملية إدخال بيانات (Insert)

بعد ما الاتصال يشتغل، تقدر تحدد قاعدة بيانات ومجموعة (Collection، دي زي الجدول في قواعد البيانات التقليدية) وتضيفلها أول مستند.

async function addUser() {
  const db = client.db("myApp");
  const users = db.collection("users");

  const result = await users.insertOne({
    name: "أحمد",
    email: "ahmed@example.com",
    isActive: true,
    createdAt: new Date()
  });

  console.log("تم الإدراج بمعرف:", result.insertedId);
}

لاحظ إنك مكتبتش أي تعريف مسبق لشكل الجدول ولا نوع الأعمدة، ده الفرق الجوهري عن الـ SQL. لو عايز تضيف حقل جديد لمستند تاني بعدين، تقدر عادي من غير ما تعدل في حاجة تانية.

خامساً: كتابة أول Query (البحث والفلترة)

الـ Query في MongoDB بتتكتب في صورة كائن (object) بيوصف الشرط اللي عايز تدور بيه، مش جملة نصية زي الـ SQL.

async function findActiveUsers() {
  const db = client.db("myApp");
  const users = db.collection("users");

  const results = await users
    .find({ isActive: true })
    .sort({ createdAt: -1 })
    .limit(10)
    .toArray();

  console.log(results);
}

الكود ده بيدور على أحدث 10 مستخدمين نشطين، مرتبين من الأحدث للأقدم. جرب تغير قيمة isActive أو تشيل شرط الـ sort وشوف الفرق في النتيجة، أسهل طريقة تتعلم بيها بناء الـ Queries هي التجربة المباشرة.

سادساً: أخطاء شائعة هتقابلك كمبتدئ

  • نسيان إضافة عنوان الـ IP بتاعك في قسم Network Access، ده أكتر سبب لرسالة خطأ الاتصال (connection timeout) عند المبتدئين.
  • كتابة الباسورد فيه رمز خاص من غير encoding، وده بيخلي رابط الاتصال يتقطع في نص الطريق من غير رسالة خطأ واضحة أحيانًا.
  • فتح اتصال جديد بـ MongoClient في كل طلب (request) بدل ما تعمل اتصال واحد وتعيد استخدامه، ده بيبطئ التطبيق جدًا مع الوقت.
  • الاعتماد على السماح لأي IP (0.0.0.0/0) في مشروع حقيقي بعد التطوير، ده مقبول للتعلم بس خطر أمني في الإنتاج.

سابعاً: خطوة قبل الإنتاج: الـ Indexes والحماية

لما مشروعك يكبر شوية، هتحتاج تعمل Index على الحقول اللي بتدور بيها كتير (زي email مثلًا)، عشان الـ Query يبقى أسرع بكتير بدل ما MongoDB تفتش في كل المستندات واحد واحد.

async function setupIndexes() {
  const db = client.db("myApp");
  const users = db.collection("users");

  await users.createIndex({ email: 1 }, { unique: true });
  console.log("الـ index اتعمل بنجاح");
}

الخيار unique: true هنا بيمنع تكرار نفس الإيميل مرتين في القاعدة، مفيد جدًا لحقول زي الإيميل أو اليوزرنيم. وقبل ما تنشر مشروعك فعليًا، ارجع لقسم Network Access وحدد عناوين IP السيرفر بتاعك بس بدل السماح للجميع، وحط الباسورد ومتغيرات الاتصال في ملف .env منفصل مش مكتوبة صريحة في الكود.

ولو المشروع بتاعك متابع على Git وعايز تتأكد إنك مش هترفع بيانات الاتصال دي بالغلط، عندي دليل كامل عن استخدام GitHub كأداة تعلم فيه شرح لملف .gitignore بالتفصيل.

الاعتماد على قواعد بيانات سحابية جاهزة زي MongoDB Atlas بقى جزء أساسي من اتجاهات البرمجة الحديثة، خصوصًا في مرحلة بناء الفكرة الأولى للمشروع. لو حابب تشوف الصورة الأشمل، اقرا مقال اتجاهات البرمجة الحديثة.

دلوقتي عندك أساس كافي تبني عليه: حساب شغال، اتصال، إدخال بيانات، واستعلام. الخطوة الطبيعية الجاية هي إنك تربط الكود ده بالـ Express endpoints اللي بنيناها في المقال السابق، بحيث كل route يقرا أو يكتب في MongoDB بدل البيانات الوهمية. لو حابب أعمل مقال منفصل يشرح الربط ده خطوة بخطوة، قولّي في التعليقات.


اكتشاف المزيد من كود التطور

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك رد

Scroll to Top