ما هو Mongoose ولماذا هو مطلوب؟
\n\nMongoose هي مكتبة نمذجة البيانات الكائنية (ODM) لـ MongoDB و Node.js. توفر طريقة قوية قائمة على المخططات لنمذجة بيانات تطبيقك. إذا كنت تعمل مع MongoDB في بيئة Node.js، فإن Mongoose هو المعيار الفعلي لإدارة البيانات.
\n\nلماذا هو مطلوب؟ MongoDB هي قاعدة بيانات NoSQL تخزن البيانات في شكل مستندات شبيهة بـ JSON. على عكس قواعد البيانات العلائقية، لا تتطلب مخططًا صارمًا. هذا يوفر مرونة، لكنه قد يؤدي إلى الفوضى في المشاريع الكبيرة. يحل Mongoose هذه المشكلة بإضافة طبقة تجريد تقوم بما يلي:
\n\n- \n
- تحديد المخططات (Schemas): تصف بنية مستنداتك: الحقول الموجودة، أنواعها، القيم الافتراضية، وما إذا كانت إلزامية. \n
- التحقق من صحة البيانات: قبل الحفظ في قاعدة البيانات، يتحقق Mongoose من توافق البيانات مع مخططك. هذا يمنع كتابة بيانات "غير صالحة". \n
- توفير طرق ملائمة: بدلاً من كتابة استعلامات خام لـ MongoDB، تستخدم طرقًا بديهية مثل
.find()و.create()و.updateOne(). \n - إدارة العلاقات: يمكنك بسهولة ربط المستندات من مجموعات مختلفة (مثل المستخدم وطلباته) باستخدام
populate(). \n - الوسيطة (Middleware/خطافات): تسمح بتنفيذ كود قبل أو بعد عمليات معينة (مثل تشفير كلمة المرور قبل الحفظ). \n
بكلمات بسيطة: Mongoose هو "جسر" بين كود جافا سكريبت الخاص بك و MongoDB، مما يجعل العمل مع قاعدة البيانات منظمًا وآمنًا ومريحًا.
\n\nتثبيت Mongoose
\n\nيتم تثبيت Mongoose في مشروع Node.js الخاص بك من خلال npm (مدير حزم Node). تأكد من تثبيت Node.js و npm لديك.
\n\nافتح الطرفية في جذر مشروعك ونفذ الأمر التالي:
\n\nnpm install mongoose\n\nسيقوم هذا الأمر بتثبيت أحدث إصدار ثابت من Mongoose وإضافته إلى ملف package.json الخاص بك في قسم dependencies.
ستحتاج أيضًا إلى خادم MongoDB مثبتًا وقيد التشغيل. يمكنك تثبيته محليًا أو استخدام خدمة سحابية مثل MongoDB Atlas.
\n\nبداية سريعة مع مثال كود
\n\nلنقم بإنشاء تطبيق بسيط يتصل بـ MongoDB ويحفظ معلومات عن مستخدم.
\n\n- \n
- توصيل Mongoose بقاعدة البيانات: \n
// app.js\nconst mongoose = require('mongoose');\n\n// سلسلة الاتصال بـ MongoDB (استبدل 'mydatabase' باسم قاعدة بياناتك)\nconst mongoURI = 'mongodb://localhost:27017/mydatabase';\n\nmongoose.connect(mongoURI)\n .then(() => console.log('تم الاتصال بنجاح بـ MongoDB!'))\n .catch(err => console.error('خطأ في الاتصال:', err));\n\n- \n
- تحديد المخطط والنموذج: \n
// تحديد مخطط (Schema) للمستخدم\nconst userSchema = new mongoose.Schema({\n name: { type: String, required: true },\n email: { type: String, required: true, unique: true },\n age: { type: Number, default: 18 }\n});\n\n// إنشاء نموذج (Model) بناءً على المخطط\nconst User = mongoose.model('User', userSchema);\n\n- \n
- إنشاء وحفظ مستند: \n
async function createUser() {\n try {\n // إنشاء مثيل للنموذج\n const newUser = new User({\n name: 'إيفان إيفانوف',\n email: 'ivan@example.com',\n age: 30\n });\n\n // حفظ المستخدم في قاعدة البيانات\n const savedUser = await newUser.save();\n console.log('تم حفظ المستخدم:', savedUser);\n } catch (error) {\n console.error('خطأ أثناء الحفظ:', error);\n }\n}