$setDifference (فرق المجموعات)
آخر تحديث: 2026-10-09
$setDifference (فرق المجموعات)
يُرجع $setDifference العناصر الموجودة في المصفوفة الأولى والغائبة عن الثانية، مع إزالة التكرارات. الاستخدامات النموذجية: إيجاد منتجات اشتراها المستخدم لكن لم يفضّلها، أو مقارنة قائمتي أسماء. يجب أن تكون الوسيطتان مصفوفتين، وتُتجاهل عناصر null. لا يوجد ترتيب مضمون للنتيجة، ولا تُحفظ المواضع النسبية بعد إزالة التكرار. تعامل عوامل المجموعات المصفوفات كمجموعات، مكوّنة عائلة مع $setIntersection و $setUnion.
| الفئة | المجموعة والشرط والتحويل |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $setDifference: [ <arrayA>, <arrayB> ] }
⚙️ المعلمات
| مصفوفة A | المجموعة المطروح منها. |
|---|---|
| مصفوفة B | المجموعة المراد طرحها. |
القيمة المرجعة:مصفوفة (بدون تكرار) للعناصر الموجودة في A وليس في B؛ null عندما يكون أي معامل null
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $setDifference: مشترى ولم يُفضَّل
db.users.aggregate([
{ $project: {
notFav: { $setDifference: ['$bought', '$favorites'] }
} }
])
المخرجات:
{ '_id': 1, 'notFav': [ 'skuB' ] }
📌 ملاحظات
- النتيجة منزوعة التكرار دون ترتيب مضمون؛ لا تعتمد على المواضع أبدًا
- تُتجاهل عناصر null ولا تؤثر في النتيجة
- يجب أن تكون الوسيطتان مصفوفتين أو يُسبب العامل خطأً
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل النتيجة منزوعة التكرار؟
Aنعم — بموجب دلالات المجموعات يظهر كل عنصر مرة واحدة.
Qهل تحافظ النتيجة على ترتيب المدخل؟
Aلا ضمان — لا تعتمد على الترتيب في الخطوات اللاحقة.
Qكيف يختلف عن $filter؟
A$filter يزيل بالشرط لكل عنصر؛ و $setDifference يحسب فرق مجموعة مقابل مصفوفة أخرى.