$merge (الدمج)

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

$merge (الدمج)

يكتب $merge نتائج خط الأنابيب إلى مجموعة هدف (ربما في قاعدة بيانات أو عنقود آخر)، محدّثًا المستندات الموجودة أو مُدخلًا جديدة حسب مفتاح مطابقة. وهو مجموعة شاملة لـ $out، ويجب أن يكون المرحلة الأخيرة. خيارات أساسية: into وon (حقل المطابقة) وwhenMatched وwhenNotMatched. يناسب ETL والعروض المادية والمزامنة عبر المجموعات.

الفئةالمتقدم والتشخيص
إصدار MongoDB4.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 أو يُدخل إليها

📌 ملاحظات

📚 دروس ذات صلة

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

Qما الفرق بين $merge و $out؟
Aيستبدل $out المجموعة بأكملها؛ بينما يحدّث $merge حسب المفتاح ويلحق تدريجيًا ويدعم أهدافًا عبر قواعد البيانات.
Qهل يمكنه الكتابة إلى قاعدة بيانات أخرى؟
Aنعم، عبر سلسلة 'db.coll' أو كائن { db, coll }.
Qكيف تُعالج المفاتيح المكررة؟
Aيقرر whenMatched: الدمج يدمج الحقول، والاستبدال يستبدل المستند، والإبقاء يحتفظ بالأصل.
Web-Tutorial.com

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

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

100%