Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การแปลงข้อมูลจาก String เป็น Date ใน MongoDB

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+) เพื่อประสิทธิภาพที่ดีกว่า