updateMany() (تحديث مستندات متعددة)
آخر تحديث: 2026-10-09
updateMany() (تحديث مستندات متعددة)
تحدّث updateMany() كل مستند يطابق مرشحًا، مثل `db.users.updateMany({ age: { $lt: 18 } }, { $set: { isTeen: true } })`. على عكس updateOne() التي تمس أول تطابق فقط، فإنها تطبّق التحديث على جميع المستندات المطابقة — وهي مناسبة لتغييرات الحالة الجماعية أو إضافة حقول في كل مكان. تُبلّغ النتيجة عن matchedCount (عدد التطابقات) و modifiedCount (المستندات التي تغيّرت فعلًا).
| الفئة | الكتابة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
db.<collection>.updateMany(<filter>, <update>, { upsert: <bool> })
⚙️ المعلمات
| شرط التصفية | كائن شرط؛ يدعم معاملات الاستعلام. |
|---|---|
| عملية التحديث | كائن معاملات التحديث المطبَّق على كل تطابق. |
| upsert | اختياري. يُدرج مستندًا واحدًا عند عدم وجود تطابق؛ الافتراضي false. |
القيمة المرجعة:UpdateResult: { acknowledged, matchedCount, modifiedCount, upsertedId }.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// updateMany: وسم كل من تجاوز 30 عامًا بصفة الأقدمية
db.users.updateMany(
{ age: { $gt: 30 } },
{ $set: { isSenior: true } }
)
المخرجات:
{ acknowledged: true, matchedCount: 3, modifiedCount: 3, upsertedId: null }
📌 ملاحظات
- يحدِّث كل تطابق؛ كن حذرًا مع مرشح فارغ {} الذي يحدِّث المجموعة بأكملها
- قد يكون modifiedCount أصغر من matchedCount عندما تكون القيم دون تغيير
- على المجموعات الكبيرة، قسّم العمل إلى دفعات وراقب الأداء
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل تحدِّث updateMany كل مستند مطابق؟
Aنعم، كل مستند مطابق يُحدَّث. تمرير مرشح فارغ {} يحدِّث المجموعة بأكملها، فكن حذرًا.
Qما الفرق بين updateMany و updateOne؟
Aتحدِّث updateOne() أول تطابق فقط؛ بينما تحدِّث updateMany() كل التطابقات. اختر updateMany() للتغييرات الجماعية.
Qلماذا يكون modifiedCount أصغر من matchedCount؟
Aبعض المستندات المطابقة تحمل القيم المستهدفة بالفعل، فتعدّها MongoDB دون تغيير وتستبعدها من modifiedCount.