Giới thiệu
MongoDB lưu ngày tháng dưới dạng BSON Date (ISODate). Trong mongo shell, đối tượng Date kế thừa từ JavaScript Date, cho phép truy cập các phương thức getFullYear(), getMonth(), getDate(), getHours()...
Ví dụ minh họa
1. Tạo document với ngày hiện tại
> db.thanhPhanNgay.insert({ "NgayGui": new Date() });
WriteResult({ "nInserted" : 1 })
2. Lấy document và gán vào biến
> var ketQua = db.thanhPhanNgay.findOne();
3. Truy cập đối tượng Date
> ketQua.NgayGui;
ISODate("2019-03-29T22:33:59.776Z")
4. Lấy các thành phần ngày/giờ
> ketQua.NgayGui.getFullYear(); // Năm
2019
> ketQua.NgayGui.getMonth(); // Tháng (0-11, 0=Tháng 1)
2
> ketQua.NgayGui.getDate(); // Ngày trong tháng (1-31)
30
> ketQua.NgayGui.getHours(); // Giờ (0-23)
4
> ketQua.NgayGui.getMinutes(); // Phút (0-59)
3
> ketQua.NgayGui.getSeconds(); // Giây (0-59)
59
> ketQua.NgayGui.getMilliseconds(); // Milli giây
776
> ketQua.NgayGui.getDay(); // Thứ trong tuần (0=CN, 6=Thứ 7)
5
Bảng tóm tắt các phương thức
| Phương thức | Trả về | Ví dụ |
|---|---|---|
getFullYear() | Năm (4 chữ số) | 2019 |
getMonth() | Tháng (0-11) | 2 (có nghĩa là Tháng 3) |
getDate() | Ngày (1-31) | 30 |
getDay() | Thứ (0-6, 0=CN) | 5 (Thứ 6) |
getHours() | Giờ (0-23) | 4 |
getMinutes() | Phút (0-59) | 3 |
getSeconds() | Giây (0-59) | 59 |
getMilliseconds() | Milli giây (0-999) | 776 |
getTime() | Timestamp (ms since epoch) | 1553898839776 |
getTimezoneOffset() | Chênh lệch UTC (phút) | -330 (UTC+5:30) |
Sử dụng trong Aggregation (MongoDB 3.6+)
Trong aggregation pipeline, dùng các toán tử date:
db.collection.aggregate([
{ $project: {
nam: { $year: "$NgayGui" },
thang: { $month: "$NgayGui" },
ngay: { $dayOfMonth: "$NgayGui" },
gio: { $hour: "$NgayGui" },
phut: { $minute: "$NgayGui" },
giay: { $second: "$NgayGui" },
thu: { $dayOfWeek: "$NgayGui" } // 1=CN, 7=Thứ 7
} }
]);
Lưu ý
- Phương thức JS Date chỉ hoạt động trong mongo shell
- Trong driver/application, dùng thư viện date của ngôn ngữ (moment.js, date-fns, java.time...)
- MongoDB lưu tất cả Date ở UTC. getHours() trả về giờ UTC
- Để chuyển múi giờ, dùng
$dateToStringvới timezone trong aggregation