$dateSubtract (الطرح من تاريخ)
آخر تحديث: 2026-10-09
$dateSubtract (الطرح من تاريخ)
يطرح $dateSubtract مقدارًا محددًا من وحدة زمنية من تاريخ ويعيد التاريخ الجديد — وهو الوجه المقابل لـ $dateAdd. ممتاز لانتهاء العضويات، تواريخ بدء القسائم، أو نوافذ الاحتفاظ. تدعم وحدة (unit) السنة والشهر والأسبوع واليوم والساعة والدقيقة والثانية والميلي ثانية؛ والكمية السالبة تعادل الإضافة. timezone اختياري ويحدد التقويم المستخدم. مثل $dateAdd يعمل في $project و $set وغيرهما من المراحل؛ والتاريخ الفارغ أو المفقود يُرجع null.
| الفئة | التاريخ |
|---|---|
| إصدار MongoDB | 5.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $dateSubtract: { startDate: <date-expression>, unit: <unit>, amount: <number>, timezone: <timezone> } }
⚙️ المعلمات
| startDate | التاريخ المطروح منه؛ قيمة Date أو timestamp أو تعبير تاريخ. |
|---|---|
| unit | الوحدة: year أو month أو week أو day أو hour أو minute أو second أو millisecond. |
| amount | المقدار المراد طرحه؛ الموجب يطرح والسالب يضيف؛ وخارج نطاق int64 يرمي خطأً. |
| timezone | المنطقة الزمنية اختيارية للحساب. |
القيمة المرجعة:التاريخ الجديد (BSON Date)؛ null إذا كان startDate يساوي null أو مفقودًا.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $dateSubtract: تذكير قبل 3 أيام من تاريخ الاستحقاق (UTC+8)
db.orders.aggregate([
{ $project: {
remindAt: { $dateSubtract: { startDate: '$dueDate', unit: 'day', amount: 3, timezone: '+08:00' } }
} }
])
المخرجات:
{ "_id": 1, "remindAt": ISODate("2026-10-22T00:00:00Z") }
{ "_id": 2, "remindAt": ISODate("2026-11-12T00:00:00Z") }
📌 ملاحظات
- معلمات مطابقة لـ $dateAdd لكن بالاتجاه المعاكس
- حساب الأشهر يقصّ أيضًا إلى أيام شهر النتيجة
- قد تسبق النتائج عام 1970؛ يدعم BSON Date الطوابع الزمنية السالبة
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف يرتبط $dateSubtract بـ $dateAdd؟
Aنفس المعلمات والاتجاه المعاكس؛ والكميات السالبة تجعلهما متكافئين.
Qهل يمكن أن تسبق النتيجة عام 1970؟
Aنعم — يدعم BSON Date الطوابع الزمنية السالبة قبل 1970.
Qما الفرق بينه وبين $dateDiff؟
Aيُرجع $dateSubtract تاريخًا جديدًا؛ بينما يُرجع $dateDiff فرقًا صحيحًا.