$dateSubtract (الطرح من تاريخ)

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

$dateSubtract (الطرح من تاريخ)

يطرح $dateSubtract مقدارًا محددًا من وحدة زمنية من تاريخ ويعيد التاريخ الجديد — وهو الوجه المقابل لـ $dateAdd. ممتاز لانتهاء العضويات، تواريخ بدء القسائم، أو نوافذ الاحتفاظ. تدعم وحدة (unit) السنة والشهر والأسبوع واليوم والساعة والدقيقة والثانية والميلي ثانية؛ والكمية السالبة تعادل الإضافة. timezone اختياري ويحدد التقويم المستخدم. مثل $dateAdd يعمل في $project و $set وغيرهما من المراحل؛ والتاريخ الفارغ أو المفقود يُرجع null.

الفئةالتاريخ
إصدار MongoDB5.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") }

📌 ملاحظات

مزيد من الحالات العملية قريبًا.

📚 دروس ذات صلة

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

Qكيف يرتبط $dateSubtract بـ $dateAdd؟
Aنفس المعلمات والاتجاه المعاكس؛ والكميات السالبة تجعلهما متكافئين.
Qهل يمكن أن تسبق النتيجة عام 1970؟
Aنعم — يدعم BSON Date الطوابع الزمنية السالبة قبل 1970.
Qما الفرق بينه وبين $dateDiff؟
Aيُرجع $dateSubtract تاريخًا جديدًا؛ بينما يُرجع $dateDiff فرقًا صحيحًا.
Web-Tutorial.com

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

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

100%