$setWindowFields (تعيين حقول النافذة)

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

$setWindowFields (تعيين حقول النافذة)

يُجري $setWindowFields حسابات النافذة — الرتب والمتوسطات المتحركة والمجاميع الجارية — عبر أقسام ويكتب النتائج إلى كل مستند. حدد حقول المخرجات بعوامل النافذة (مثل $rank و $denseRank أو المُراكمات) وترتيب sortBy ونطاق نافذة اختياري. فكّر في دوال النافذة في SQL.

الفئةالتجميع والنافذة
إصدار MongoDB5.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $setWindowFields: { partitionBy: <expression>, sortBy: { <field>: <1 or -1> }, output: { <field>: { <windowOperator>: ..., window: { documents: [...], range: [...] } } } } }

⚙️ المعلمات

partitionByتعبير التقسيم؛ وعند إغفاله تُشكّل كل المستندات قسمًا واحدًا.
sortByترتيب الفرز داخل الأقسام، والذي يحدد ترتيب حساب النوافذ.
outputحقول الإخراج مع تعريفات معاملات النوافذ الخاصة بها.

القيمة المرجعة:تدفق مستندات مع إضافة حقول محسوبة بالنوافذ

▶ مثال

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

// $setWindowFields: المجموع الجاري لكل منطقة
db.sales.aggregate([
  { $setWindowFields: {
    partitionBy: '$region',
    sortBy: { date: 1 },
    output: {
      runningTotal: { $sum: '$amount', window: { documents: ['unbounded', 'current'] } }
    }
  } }
])

المخرجات:

// كل عملية بيع تكتسب مجموعًا جاريًا
{ "region": "EAST", "date": "2024-01-02", "amount": 30, "runningTotal": 30 }

📌 ملاحظات

📚 دروس ذات صلة

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

Qما الفرق بين $setWindowFields و $group؟
Aيطوي $group مجموعة في مستند واحد؛ بينما يُبقي $setWindowFields كل مستند ويكتب نتائج النافذة عليه.
Qهل يمكنه حساب متوسط متحرك؟
Aنعم، اضبط النافذة من المستندات السبعة السابقة إلى الحالي واستخدم مُراكم $avg.
Qكيف أكتب نطاق نافذة؟
Aمثل { documents: ['unbounded', 'current'] } الذي يمتد من بداية القسم إلى المستند الحالي؛ ويعرّف range فاصلًا قيميًا.
Web-Tutorial.com

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

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

100%