اذهب إلى المحتوى

السؤال

نشر

لدي مستندات فيها تاريخ معيّن بالشكل التالي:

{
    "username" : "test123",
    "subDate" : ISODate("2020-10-01T00:00:00.000Z"),
    "phone" : 112334556
}

وأقوم بإجراء الاستعلام التالي:

find({
  "subDate" : { "$gte" : { "$date" : "2020-10-01T00:00:00.000Z"}}
})

ولكن لا يتم إعادة أي مستند، ما الخطأ هنا وكيف يمكنني إجراء هذا الاستعلام حسب التاريخ؟

Recommended Posts

  • 1
نشر

على الرغم من $date جزء من MongoDB Extended JSON وهذا ما تحصل عليه بشكل افتراضي مع mongoexport لا أعتقد أنه يمكنك حقًا استخدامه كجزء من الاستعلام. مثال على ذلك

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

ستحصل على هذا الخطأ

error: { "$err" : "invalid operator: $date", "code" : 10068 }

ولكن يمكنك الإستعلام بهذه الطريقة

db.mycollection.find({
    "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})

أو بهذه

db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

 

  • 1
نشر

قبل التعامل مع التواريخ في mongodb يجب عليك معرفة مايلي:

  • يجب عليك تمرير كائن Javascript Date.
  • يجب أن يكون صديقًا لـ ISODate
  • تحتاج إلى معالجة التاريخ حتى ISO
  • عادة ما يكون العمل مع التواريخ عملية شاقة دائمًا ، mongodb ليس استثناءً

فيما يلي مقتطف عمل من التعليمات البرمجية ، حيث نقوم بتمرير تاريخ للإستعلام و هنا أستخدم وحدة mongoose وأريد نتائج للصفوف التي تكون سمة التاريخ فيها أكبر من أي (بعد) التاريخ المحدد

var inputDate = new Date(myDate.toISOString());
MyModel.find({
    'date': { $gte: inputDate }
})

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...