$addToSet (الإضافة إلى مجموعة)
آخر تحديث: 2026-10-09
$addToSet (الإضافة إلى مجموعة)
يضيف $addToSet قيمة إلى مصفوفة فقط إذا لم تكن موجودة بالفعل، محافظًا على خلوّ المصفوفة من التكرارات. `{ $addToSet: { tags: 'mongodb' } }`. لإضافة عدة قيم دفعة واحدة ادمجه مع $each. يكشف التكرار بمقارنة القيم كاملة (المستندات المتداخلة حقلًا بحقل). رائع للوسوم وقوائم المتابعة.
| الفئة | تحديث المصفوفة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $addToSet: { <array field>: <value> } }
⚙️ المعلمات
| حقل مصفوفة | حقل المصفوفة المراد الإضافة إليه. |
|---|---|
| قيمة | القيمة المراد إضافتها؛ تُتخطّى إذا كانت موجودة بالفعل. |
القيمة المرجعة:نتيجة التحديث
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $addToSet: إضافة وسم (مُتخطى إذا كان موجودًا)
db.articles.updateOne(
{ _id: 1 },
{ $addToSet: { tags: 'mongodb' } }
)
// القيم المتعددة تتطلب $each
db.articles.updateOne(
{ _id: 1 },
{ $addToSet: { tags: { $each: ['database', 'nosql'] } } }
)
المخرجات:
// mongodb الموجود لا يُكرَّر؛ ويُلحق database وnosql
📌 ملاحظات
- مقارنة التكرار تتم على القيم كاملة
- عدة قيم دفعة واحدة تتطلب $each
- ينشئ المصفوفة إذا كانت مفقودة؛ الحقول غير المصفوفية ترمي خطأ
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
استعلامات المصفوفات والوثائق المتداخلة
تجربة عملية: عمليات CRUD لنظام تعليقات المدونة
تحديث المستند: شرح مفصل لـ `updateOne` و`updateMany`
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $addToSet و $push؟
A$addToSet يزيل التكرارات؛ بينما $push يلحق ويسمح بالتكرار.
Qكيف أضيف عدة قيم دفعة واحدة؟
Aاستخدم $each: { $addToSet: { tags: { $each: ['a', 'b'] } } }.
Qهل يمكن لـ $addToSet إضافة مستندات متداخلة؟
Aنعم؛ مقارنة التكرار تشمل المستند بأكمله.