Giới thiệu
Để chèn tài liệu có trường ngày tháng trong MongoDB, bạn sử dụng constructor Date() hoặc ISODate() trực tiếp trong document.
Cú pháp
// Cách 1: new Date() với string ISO
"tenTruong": new Date("2019-01-01")
// Cách 2: ISODate() (MongoDB shell helper)
"tenTruong": ISODate("2019-01-01")
// Cách 3: new Date() với các tham số
"tenTruong": new Date(2019, 0, 1) // Tháng 0 = Tháng 1
Ví dụ minh họa
1. Insert 3 tài liệu với ngày khác nhau
> db.chenNgayDemo.insertOne({
"TenNguoiDung": "Larry",
"TinNhan": "Hi",
"NgayDang": new Date("2012-09-24")
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cca58a629b87623db1b16") }
> db.chenNgayDemo.insertOne({
"TenNguoiDung": "Chris",
"TinNhan": "Hello",
"NgayDang": new Date("2015-12-31")
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cca71a629b87623db1b17") }
> db.chenNgayDemo.insertOne({
"TenNguoiDung": "Robert",
"TinNhan": "Bye",
"NgayDang": new Date("2019-01-01")
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cca85a629b87623db1b18") }
2. Kết quả - MongoDB lưu dưới dạng ISODate
{ "_id" : ObjectId("5c9cca58a629b87623db1b16"), "TenNguoiDung" : "Larry", "TinNhan" : "Hi", "NgayDang" : ISODate("2012-09-24T00:00:00Z") }
{ "_id" : ObjectId("5c9cca71a629b87623db1b17"), "TenNguoiDung" : "Chris", "TinNhan" : "Hello", "NgayDang" : ISODate("2015-12-31T00:00:00Z") }
{ "_id" : ObjectId("5c9cca85a629b87623db1b18"), "TenNguoiDung" : "Robert", "TinNhan" : "Bye", "NgayDang" : ISODate("2019-01-01T00:00:00Z") }
Các định dạng ngày được hỗ trợ
| Định dạng | Ví dụ | Ghi chú |
|---|---|---|
| ISO 8601 UTC | "2019-01-01T00:00:00Z" | Khuyên dùng, không ambigu |
| ISO 8601 Local | "2019-01-01" | Được hiểu là local midnight |
| RFC 2822 | "Mon, 01 Jan 2019 00:00:00 GMT" | Hỗ trợ nhưng ít dùng |
| Timestamp (ms) | 1546300800000 | Milliseconds since epoch |
Best Practices
- Luôn dùng UTC (ISODate với Z suffix) để tránh vấn đề múi giờ
- Trong application code, dùng Date object của ngôn ngữ (JavaScript Date, Python datetime, Java Instant...)
- MongoDB driver tự động chuyển đổi Date object thành BSON Date
- Query date range:
{ ngay: { $gte: ISODate("2019-01-01"), $lt: ISODate("2019-02-01") } }