watch() (مراقبة تغييرات المجموعة)
آخر تحديث: 2026-10-09
watch() (مراقبة تغييرات المجموعة)
تراقب watch() مجموعة بحثًا عن التغييرات وتُعيد تدفق تغييرات (Change Stream)، مثل `db.users.watch([{ $match: { 'operationType': 'insert' } }])`. كل إدراج أو تحديث أو حذف أو استبدال يصدر حدث تغيير. تتطلب مجموعة نسخ متماثلة أو عنقودًا مجزّأ — الخوادم المفردة لا تدعمها. من الاستخدامات النمطية: المزامنة اللحظية، وإبطال الذاكرة المخبأة، وتدقيق السجلات.
| الفئة | الفهرس والإدارة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
db.<collection>.watch(<pipeline>, { fullDocument: 'updateLookup' })
⚙️ المعلمات
| مصفوفة المراحل | اختياري. خط أنابيب تجميع يرشّح أحداث التغيير. |
|---|---|
| fullDocument | اختياري. 'updateLookup' يُرفق المستند الكامل بأحداث التحديث. |
القيمة المرجعة:مؤشر Change Stream للتكرار عليه أو الاستماع إليه.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// watch: الاستماع إلى عمليات الإدراج في users
const stream = db.users.watch([
{ $match: { 'operationType': 'insert' } }
])
stream.forEach(ev => print('New user: ' + ev.fullDocument.name))
المخرجات:
New user: Alice
New user: Bob
📌 ملاحظات
- مجموعات النسخ المتماثلة والعناقيد المجزأة فقط — غير متاحة على الخادم المفرد
- أحداث التغيير تُخزَّن على الخادم في سجل العمليات (oplog)
- اجعل المعالجات غير قابلة للاستبدال (idempotent) تحسبًا لإعادة تسليم الأحداث
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل تعمل watch على MongoDB مفرد؟
Aلا — تحتاج watch() إلى مجموعة نسخ متماثلة أو عنقود مجزّأ؛ ترفع خطأً على النشر المفرد.
Qهل يمكن أن تستمع watch إلى عمليات الإدراج فقط؟
Aنعم — صفِّ بخط أنابيب: db.users.watch([{$match: {'operationType': 'insert'}}]).
Qما حالات الاستخدام النمطية لـ watch()؟
Aالمزامنة اللحظية، وإبطال الذاكرة المخبأة، وتدقيق السجلات، والتدفقات المبنية على الأحداث التي يجب أن تتفاعل مع تغييرات البيانات.