MongoDB จัดเก็บวันที่ในรูปแบบ ISODate หากข้อมูลวันที่ถูกเก็บเป็น String จะต้องแปลงให้เป็นชนิดข้อมูล Date เพื่อให้สามารถทำงานกับคำสั่งเกี่ยวกับวันที่ได้อย่างถูกต้อง
ตัวอย่างข้อมูลที่เก็บเป็น String
> db.stringToDateDataTypeDemo.insertOne({"CustomerName": "Carol", "ShippingDate": "2019-01-21"});
{ "acknowledged": true, "insertedId": ObjectId("5ca2071d66324ffac2a7dc60") }
> db.stringToDateDataTypeDemo.insertOne({"CustomerName": "Bob", "ShippingDate": "2019-02-24"});
{ "acknowledged": true, "insertedId": ObjectId("5ca2073566324ffac2a7dc61") }
> db.stringToDateDataTypeDemo.insertOne({"CustomerName": "Chris", "ShippingDate": "2019-04-01"});
{ "acknowledged": true, "insertedId": ObjectId("5ca2074266324ffac2a7dc62") }
แสดงข้อมูลก่อนแปลง
> db.stringToDateDataTypeDemo.find().pretty();
ผลลัพธ์ (ShippingDate เป็น String)
{
"_id": ObjectId("5ca2071d66324ffac2a7dc60"),
"CustomerName": "Carol",
"ShippingDate": "2019-01-21"
}
{
"_id": ObjectId("5ca2073566324ffac2a7dc61"),
"CustomerName": "Bob",
"ShippingDate": "2019-02-24"
}
{
"_id": ObjectId("5ca2074266324ffac2a7dc62"),
"CustomerName": "Chris",
"ShippingDate": "2019-04-01"
}
แปลง String เป็น Date ด้วย forEach และ ISODate
> db.stringToDateDataTypeDemo.find().forEach(function(data) {
data.ShippingDate = ISODate(data.ShippingDate);
db.stringToDateDataTypeDemo.save(data);
});
ตรวจสอบหลังแปลง
> db.stringToDateDataTypeDemo.find().pretty();
ผลลัพธ์ (ShippingDate กลายเป็น ISODate)
{
"_id": ObjectId("5ca2071d66324ffac2a7dc60"),
"CustomerName": "Carol",
"ShippingDate": ISODate("2019-01-21T00:00:00Z")
}
{
"_id": ObjectId("5ca2073566324ffac2a7dc61"),
"CustomerName": "Bob",
"ShippingDate": ISODate("2019-02-24T00:00:00Z")
}
{
"_id": ObjectId("5ca2074266324ffac2a7dc62"),
"CustomerName": "Chris",
"ShippingDate": ISODate("2019-04-01T00:00:00Z")
}
หมายเหตุ: วิธีนี้เหมาะสำหรับข้อมูลจำนวนน้อย สำหรับข้อมูลปริมาณมาก ควรใช้ updateMany() ร่วมกับ $dateFromString (MongoDB 3.6+) เพื่อประสิทธิภาพที่ดีกว่า