forEach() (التكرار على مؤشر)

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

forEach() (التكرار على مؤشر)

تشغّل forEach() استدعاءً رجعيًا على كل مستند في مؤشر، مثل `db.users.find().forEach(function(doc) { print(doc.name) })`. تعالج أثناء السحب دون تخزين كل شيء في الذاكرة مثل toArray()، مما يجعلها الخيار الصديق للتدفق لمجموعات النتائج الكبيرة. يمكن للاستدعاء الرجعي الجمع أو العدّ أو التسجيل — وهي عنصر أساسي للوظائف الجماعية.

الفئةالمؤشر
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

db.<collection>.find(<filter>).forEach(<callback>)

⚙️ المعلمات

دالة الاستدعاءدالة تستقبل كل مستند، مثل function(doc) { print(doc.name) }.

القيمة المرجعة:‏undefined (تُنفَّذ عمليات الاستدعاء على تدفق مستندات الخادم).

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// forEach: عدّ البالغين أثناء التدفق
let n = 0
db.users.find({ age: { $gte: 18 } }).forEach(doc => {
  n++
})
print(n)

المخرجات:

Alice
Bob
Processed: 2

📌 ملاحظات

📚 دروس ذات صلة

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

Qأيهما يستهلك ذاكرة أقل، forEach أم toArray؟
Aتعالج forEach() أثناء السحب بذاكرة منخفضة؛ بينما تُحمّل toArray() كل شيء في الذاكرة، وهو أغلى مع المجموعات الكبيرة.
Qهل يمكن للاستدعاء الرجعي في forEach تعديل المستندات؟
Aيتلقى الاستدعاء نسخة — لا تبقى التعديلات؛ استدعِ عمليات تحديث داخل الاستدعاء لكتابة التغييرات.
Qهل يمكنني الخروج مبكرًا من forEach؟
Aلا تملك forEach آلية break؛ للخروج الشرطي كرِّر يدويًا بـ next() أو اقتطع بـ limit() أولًا.
Web-Tutorial.com

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

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

100%