การใช้ $dateToString สำหรับกรองวันที่
เมื่อต้องการกรองเอกสารตามรูปแบบวันที่เฉพาะ (เช่น YYYY-MM-DD) ให้ใช้ $dateToString แปลง ISODate เป็นสตริงก่อน แล้วค่อย match
ตัวอย่างข้อมูล
> db.demo433.insertOne({ "DueDate": new Date("2019-11-23") });
> db.demo433.insertOne({ "DueDate": new Date("2020-01-03") });
แสดงข้อมูล
> db.demo433.find();
ผลลัพธ์:
{ "_id": ObjectId(...), "DueDate": ISODate("2019-11-23T00:00:00Z") }
{ "_id": ObjectId(...), "DueDate": ISODate("2020-01-03T00:00:00Z") }
Query กรองวันที่ 2020-01-03
> db.demo433.aggregate([
{ $addFields: { stringDate: { $dateToString: { format: "%Y-%m-%d", date: "$DueDate" } } } },
{ $match: { "stringDate": "2020-01-03" } },
{ $project: { "stringDate": 0 } }
])
ผลลัพธ์
{ "_id": ObjectId("5e771290bbc41e36cc3cae92"), "DueDate": ISODate("2020-01-03T00:00:00Z") }
รูปแบบวันที่ที่ใช้ได้
%Y- ปี 4 หลัก%m- เดือน 2 หลัก%d- วัน 2 หลัก%H,%M,%S- ชั่วโมง นาที วินาที
หมายเหตุ
วิธีนี้เหมาะสำหรับการกรองตามวันที่เท่านั้น (ไม่รวมเวลา) หากต้องการกรองช่วงเวลา ควรใช้ $gte/$lte กับ ISODate โดยตรงเพื่อประสิทธิภาพดียิ่งขึ้น