$merge (الدمج)
آخر تحديث: 2026-10-09
$merge (الدمج)
يكتب $merge نتائج خط الأنابيب إلى مجموعة هدف (ربما في قاعدة بيانات أو عنقود آخر)، محدّثًا المستندات الموجودة أو مُدخلًا جديدة حسب مفتاح مطابقة. وهو مجموعة شاملة لـ $out، ويجب أن يكون المرحلة الأخيرة. خيارات أساسية: into وon (حقل المطابقة) وwhenMatched وwhenNotMatched. يناسب ETL والعروض المادية والمزامنة عبر المجموعات.
| الفئة | المتقدم والتشخيص |
|---|---|
| إصدار MongoDB | 4.2+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $merge: { into: "<collection>", on: "<matchField>", whenMatched: "merge", whenNotMatched: "insert" } }
⚙️ المعلمات
| into | المجموعة الهدف، كنص أو كائن { db, coll }. |
|---|---|
| on | الحقل المستخدم لمطابقة المستندات الموجودة؛ الافتراضي هو _id. |
| whenMatched | السلوك عند التطابق: merge أو replace أو keepExisting أو خط أنابيب مخصَّص. |
| whenNotMatched | السلوك عند عدم التطابق: insert أو discard. |
القيمة المرجعة:لا تستمر أي مستندات؛ تُكتب النتائج في المجموعة الهدف
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $merge: كتابة إجماليات العملاء إلى cust_stats
db.orders.aggregate([
{ $group: { _id: '$cust_id', total: { $sum: '$amount' } } },
{ $merge: {
into: 'cust_stats',
on: '_id',
whenMatched: 'replace',
whenNotMatched: 'insert'
} }
])
المخرجات:
// تُحدَّث cust_stats أو يُدخل إليها
📌 ملاحظات
- يجب أن يكون المرحلة الأخيرة من خط الأنابيب
- سلسلة into تُنشئ المجموعة الهدف تلقائيًا
- الافتراضيات: whenMatched يدمج، whenNotMatched يُدخل
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $merge و $out؟
Aيستبدل $out المجموعة بأكملها؛ بينما يحدّث $merge حسب المفتاح ويلحق تدريجيًا ويدعم أهدافًا عبر قواعد البيانات.
Qهل يمكنه الكتابة إلى قاعدة بيانات أخرى؟
Aنعم، عبر سلسلة 'db.coll' أو كائن { db, coll }.
Qكيف تُعالج المفاتيح المكررة؟
Aيقرر whenMatched: الدمج يدمج الحقول، والاستبدال يستبدل المستند، والإبقاء يحتفظ بالأصل.