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

วิธี Insert Date() ใน MongoDB ผ่าน Mongo Shell

การ Insert วันที่ (Date) ใน MongoDB ผ่าน Mongo Shell

ใน Mongo Shell สามารถสร้าง Date object ด้วย JavaScript Date constructor แล้ว insert ลงในเอกสารได้

ไวยากรณ์

var yourVariableName = new Date(year, month, day, hour, minute); 
db.yourCollectionName.insertOne({yourDateFieldName: yourVariableName});

หมายเหตุ: พารามิเตอร์ month เริ่มจาก 0 (January = 0, December = 11)

ตัวอย่างการสร้าง Date Variable

> var creatingDate = new Date(2019, 03, 29, 13, 12);

สร้างวันที่ 29 เมษายน 2019 เวลา 13:12 (เดือน 03 = เมษายน)

Insert เอกสารพร้อม Date Variable

> db.insertingDateUsingVariableDemo.insertOne({
    "UserName": "John",
    "UserMessages": ["Hi", "Hello", "Awesome"],
    "UserPostDate": creatingDate
});

แสดงข้อมูล

> db.insertingDateUsingVariableDemo.find().pretty();

ผลลัพธ์ (จัดเก็บเป็น ISODate):

{ 
    "_id" : ObjectId("5c9d1b19a629b87623db1b21"), 
    "UserName" : "John", 
    "UserMessages" : [ "Hi", "Hello", "Awesome" ], 
    "UserPostDate" : ISODate("2019-04-29T07:42:00Z") 
}

รูปแบบ Date อื่นๆ ที่ใช้ได้

1. ISODate String (แนะนำ)

> db.collection.insertOne({ 
    dateField: new ISODate("2019-04-29T13:12:00Z") 
});

// หรือ
> db.collection.insertOne({ 
    dateField: ISODate("2019-04-29T13:12:00Z") 
});

2. new Date() โดยไม่มีพารามิเตอร์ (วันเวลาปัจจุบัน)

> db.collection.insertOne({ 
    createdAt: new Date() 
});

3. Date String Parsing

> db.collection.insertOne({ 
    dateField: new Date("2019-04-29") 
});
> db.collection.insertOne({ 
    dateField: new Date("2019-04-29T13:12:00Z") 
});

4. Timestamp (MongoDB Internal)

> db.collection.insertOne({ 
    timestampField: new Timestamp() 
});

การจัดการ Timezone

  • MongoDB จัดเก็บ Date ทั้งหมดในรูปแบบ UTC (ISODate)
  • การแสดงผลใน Shell จะแสดงเป็น UTC (มี Z ต่อท้าย)
  • Application ควรจัดการ Timezone เองที่ Layer Application

ตัวอย่างการ Query วันที่

// วันที่เท่ากับ
db.collection.find({ dateField: ISODate("2019-04-29") });

// ช่วงวันที่
db.collection.find({ 
    dateField: { 
        $gte: ISODate("2019-04-01"), 
        $lt: ISODate("2019-05-01") 
    } 
});

// ใช้ Date object
var start = new Date(2019, 3, 1); // 1 เมษายน
var end = new Date(2019, 4, 1);   // 1 พฤษภาคม
db.collection.find({ dateField: { $gte: start, $lt: end } });

Best Practices

  • ใช้ ISODate() หรือ new Date(ISOString) เพื่อความชัดเจน
  • หลีกเลี่ยง new Date(year, month, day) เพราะ month เริ่มจาก 0 งงง่าย
  • เก็บวันที่เป็น UTC เสมอ
  • ใช้ Date object ไม่ใช่ String สำหรับการ Query และ Index