$unwind (تفكيك المصفوفة)

آخر تحديث: 2026-10-09

$unwind (تفكيك المصفوفة)

يفكك $unwind حقل مصفوفة، مصدرًا مستندًا واحدًا لكل عنصر مع نسخ كل الحقول الأخرى. استخدمه لتسطيح المصفوفات قبل التجميع أو الإحصائيات أو الربط. تُسقط المستندات ذات المصفوفات الفارغة أو المفقودة أو null افتراضيًا؛ ويُبقيها preserveNullAndEmptyArrays ويكشف includeArrayIndex فهرس العنصر. يؤدي التفكيك إلى مضاعفة عدد المستندات، لذا وازن المراحل اللاحقة.

الفئةالمراحل الأساسية
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $unwind: { path: "$arrayField", preserveNullAndEmptyArrays: <bool>, includeArrayIndex: "<indexField>" } }

⚙️ المعلمات

pathمسار حقل المصفوفة المراد تفكيكه، مسبوقًا بـ ‏$.
preserveNullAndEmptyArraysعندما تكون true، تُبقي المستندات ذات المصفوفات الفارغة أو المفقودة أو null.
includeArrayIndexيُخرج فهرس كل عنصر في المصفوفة الأصلية إلى هذا الحقل.

القيمة المرجعة:تدفق مستندات مُسطَّح (مستند واحد لكل عنصر مصفوفة)

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// $unwind: تفكيك مصفوفة tags
db.inventory.aggregate([
  { $unwind: { path: '$tags', includeArrayIndex: 'idx' } }
])

المخرجات:

{ "_id": 1, "item": "Pen", "tags": "A", "idx": 0 }
{ "_id": 1, "item": "Pen", "tags": "B", "idx": 1 }

📌 ملاحظات

📚 دروس ذات صلة

❓ الأسئلة الشائعة

Qهل تتشارك المستندات الناتجة عن $unwind في نفس _id؟
Aنعم. يُنسخ _id وكل الحقول الأخرى حرفيًا؛ ويصبح حقل المصفوفة عنصرًا واحدًا فقط.
Qماذا يحدث عندما يصادف $unwind مصفوفة فارغة؟
Aيُسقط المستند افتراضيًا؛ اضبط preserveNullAndEmptyArrays إلى true لإبقائه.
Qهل يمكن تفكيك عدة حقول مصفوفة دفعة واحدة؟
Aيتعامل $unwind الواحد مع مصفوفة واحدة. سلسل عدة مراحل $unwind لعدة مصفوفات، وهو ما يعطي جداءً ديكارتيًا.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%