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

การแทรกข้อมูลวันที่ใน MongoDB ด้วย Date() และ ISODate

วิธีการ Insert Date ใน MongoDB ให้ถูกต้อง

MongoDB เก็บวันที่ในรูปแบบ BSON Date (64-bit integer มิลลิวินาทีจาก Unix Epoch) ใช้ ISODate() หรือ new Date() ในการสร้างค่าวันที่

ตัวอย่างการ Insert Date แบบต่างๆ

> // วันที่/เวลาปัจจุบัน
> db.demo421.insert({ "DueDate": new Date(Date.now()) });

> // วันที่เฉพาะ (UTC)
> db.demo421.insert({ "DueDate": new Date("2020-01-15") });

> // วันที่เวลาเฉพาะ (ISO String)
> db.demo421.insert({ "DueDate": new Date("2018-12-31") });

แสดงข้อมูลที่ Insert

> db.demo421.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "DueDate": ISODate("2020-03-19T16:50:52.746Z") }
{ "_id": ObjectId("..."), "DueDate": ISODate("2020-01-15T00:00:00Z") }
{ "_id": ObjectId("..."), "DueDate": ISODate("2018-12-31T00:00:00Z") }

รูปแบบการสร้าง Date ใน MongoDB Shell

รูปแบบคำอธิบายตัวอย่าง
new Date()เวลาปัจจุบัน (Local Time)new Date()
new Date(milliseconds)จาก Unix Timestamp (ms)new Date(1578960000000)
new Date(dateString)Parse ISO 8601 Stringnew Date("2020-01-15")
ISODate()Alias ของ new Date() (แนะนำ)ISODate("2020-01-15")

ข้อสังเกตสำคัญ

  • MongoDB เก็บวันที่เป็น UTC เสมอ (Zulu time - ตัว Z ท้าย)
  • Date String ไม่มี Timezone -> ถือเป็น UTC
  • Date String มี Timezone -> แปลงเป็น UTC ก่อนเก็บ
  • ใน Application ให้ใช้ Date Object ของภาษานั้น (DateTime, datetime, Date ฯลฯ) ไดรเวอร์จะแปลงให้อัตโนมัติ

การ Query วันที่

// มากกว่าวันที่
db.demo421.find({ DueDate: { $gt: ISODate("2020-01-01") } });

// ช่วงวันที่
db.demo421.find({ DueDate: { $gte: ISODate("2020-01-01"), $lt: ISODate("2020-02-01") } });

// ใช้ Date Object จากภาษาโปรแกรมได้เลย (Driver จะแปลง)

การ Format แสดงผล (ใน Aggregation)

> db.demo421.aggregate([
  { $project: { DueDate: 1, formatted: { $dateToString: { format: "%Y-%m-%d", date: "$DueDate" } } } }
]);