Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách lấy thành phần ngày/giờ từ Date/ISODate trong MongoDB

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ứcTrả 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 $dateToString với timezone trong aggregation