$dateTrunc (اقتطاع التاريخ)
آخر تحديث: 2026-10-09
$dateTrunc (اقتطاع التاريخ)
يقتطع $dateTrunc تاريخًا إلى بداية وحدة معينة ويعيد التاريخ الجديد — مثالي لمحاذاة الطوابع الزمنية في دلاء ساعات/أيام/أشهر للإحصاءات. تدعم وحدة (unit) السنة والربع والشهر والأسبوع واليوم والساعة والدقيقة والثانية؛ وتوسّع binSize الدلو (مثل دلاء 3 ساعات). تُطبّق startOfWeek على الأسبوع فقط. تحدد timezone التقويم المستخدم للاقتطاع — اضبطها صراحةً عبر المناطق. طُوّر في MongoDB 5.0.
| الفئة | التاريخ |
|---|---|
| إصدار MongoDB | 5.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $dateTrunc: { date: <date-expression>, unit: <unit>, binSize: <number>, timezone: <timezone>, startOfWeek: <week-start> } }
⚙️ المعلمات
| date | مطلوب؛ التاريخ المراد اقتطاعه. |
|---|---|
| unit | مطلوب؛ وحدة الاقتطاع: year أو quarter أو month أو week أو day أو hour أو minute أو second. |
| binSize | حجم حاوية (bucket) اختياري يوسّع الوحدة. |
| timezone | المنطقة الزمنية اختيارية للاقتطاع. |
| startOfWeek | اختياري؛ يُطبَّق فقط عندما تكون unit هي week. |
القيمة المرجعة:التاريخ المقتطع (BSON Date)؛ null إذا كان date يساوي null أو مفقودًا.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $dateTrunc: تجميع المبيعات بالساعات
db.sales.aggregate([
{ $group: {
_id: { $dateTrunc: { date: '$soldAt', unit: 'hour' } },
total: { $sum: '$amount' }
} }
])
المخرجات:
{ "_id": ISODate("2026-09-25T08:00:00Z"), "total": 1250 }
{ "_id": ISODate("2026-09-25T09:00:00Z"), "total": 980 }
📌 ملاحظات
- النتيجة دائمًا بداية وحدة: اليوم يعطي 00:00 والساعة تعطي رأس الساعة
- تدعم binSize الدقيقة والساعة واليوم والأسبوع والشهر والربع والسنة
- يقسم الربع السنة إلى 4؛ والنتيجة هي أول يوم في الربع
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف يختلف هذا عن $dateAdd؟
Aيقوم $dateTrunc بالمحاذاة إلى بداية وحدة فقط؛ بينما $dateAdd يحرّك الوقت.
Qماذا تعني binSize؟
Aتوسّع الوحدة إلى دلاء — binSize 3 مع وحدة الساعة يعطي دلاء 3 ساعات.
Qما هو وقت النتيجة؟
Aاليوم يعطي 00:00 من ذلك اليوم؛ والساعة تعطي رأس الساعة.