NahdaAIنهضة
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"
} }
التطبيق العملي المباشر

تحدي الدرس الثاني: إدارة المستخدمين والمهارات

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أضف مهارة "Tailwind CSS" إلى مصفوفة skills بداخل المستند الأول.
  2. أضف كائناً مضنّاً address يحتوي على city و country.
  3. أضف مستنداً ثالثاً باستخدام insertMany().
  4. اعرض جميع المستخدمين بـ db.users.find({}).
  5. اطبع عدد المستخدمين الإجمالي.
⏳ جارٍ تحميل المحرر التفاعلي...