NoSQL Databases • المستوى الأول • الدرس 2
العودة لفهرس المستوىإضافة المستندات والمصفوفات (insertOne & insertMany)
أهداف الدرس
- استخدام
insertOneوinsertManyلتخزين البيانات. - تخزين الحقول المعقدة كالمصفوفات والكائنات المضمنة (Nested Objects).
- فهم الدور التلقائي لحقل
_idبنوعObjectId. - التمييز بين الإدراج الفردي والجماعي وتأثيره على الأداء.
1. إدراج مستند فردي — insertOne()
تُستخدم insertOne() لإضافة مستند واحد إلى مجموعة محددة. MongoDB يولّد تلقائياً حقل _id فريداً بنوع ObjectId لضمان عدم تكرار المستندات.
javascript
db.users.insertOne({
name: "جمال سالم",
email: "[email protected]",
skills: ["React", "Node.js", "MongoDB"],
age: 30
});
// الناتج:
// {
// acknowledged: true,
// insertedId: ObjectId("6512a1b2c3d4e5f6a7b8c9d0")
// }2. الإدراج الجماعي — insertMany()
لإضافة عدد كبير من المستندات دفعة واحدة، استخدم insertMany() التي تمرر مصفوفة من المستندات. ميزة الأداء: استعلام واحد بدل عدة استعلامات = أسرع بكثير.
javascript
db.users.insertMany([
{ name: "أحمد علي", age: 25 },
{ name: "سارة محمود", age: 28 },
{ name: "خالد عمر", age: 34 }
]);
// الناتج:
// {
// acknowledged: true,
// insertedCount: 3,
// insertedIds: { '0': ObjectId(...), '1': ObjectId(...), '2': ObjectId(...) }
// }3. الحقول المعقدة — Arrays & Nested Objects
من أقوى ميزات MongoDB: القدرة على تخزين مصفوفات وكائنات مضمنة داخل مستند واحد، بدون الحاجة لـ JOINs.
javascript
db.users.insertOne({
name: "جمال",
// مصفوفة نصوص
skills: ["React", "Node.js", "MongoDB"],
// مصفوفة كائنات
projects: [
{ title: "متجر إلكتروني", year: 2024 },
{ title: "منصة تعليمية", year: 2025 }
],
// كائن مضمن
address: {
city: "الرياض",
country: "السعودية",
coordinates: { lat: 24.7136, lng: 46.6753 }
}
});4. أنواع البيانات المدعومة (BSON Types)
نصوص وأرقام
{ name: "جمال", age: 30,
salary: 15000.50 }تواريخ ومنطقية
{ active: true,
createdAt: new Date() }مصفوفات
{ tags: ["a", "b"],
scores: [85, 90, 78] }كائنات مضمنة
{ address: {
city: "الرياض",
zip: "12345"
} } التطبيق العملي المباشر
تحدي الدرس الثاني: إدارة المستخدمين والمهارات
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- أضف مهارة
"Tailwind CSS"إلى مصفوفةskillsبداخل المستند الأول. - أضف كائناً مضنّاً
addressيحتوي علىcityوcountry. - أضف مستنداً ثالثاً باستخدام
insertMany(). - اعرض جميع المستخدمين بـ
db.users.find({}). - اطبع عدد المستخدمين الإجمالي.
⏳ جارٍ تحميل المحرر التفاعلي...