0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Các Kiểu Dữ Liệu Trong MongoDB: Tìm Hiểu về Date và ISODate

Đăng vào 4 ngày trước

• 2 phút đọc

Tìm Hiểu về Kiểu Dữ Liệu Date và ISODate trong MongoDB

Trong MongoDB, ISODate được sử dụng để lưu trữ các đối tượng ngày tháng theo định dạng ISO 8601, một tiêu chuẩn cho việc biểu diễn ngày và giờ. ISODate thường được sử dụng để xử lý các trường ngày tháng trong các tài liệu của MongoDB.

Cú Pháp

Bạn có thể chỉ định một trong các định dạng sau: Date() trả về ngày hiện tại dưới dạng chuỗi trong mongosh. new Date() trả về ngày hiện tại dưới dạng đối tượng Date. Mongosh sẽ bao bọc đối tượng Date bằng hàm trợ giúp ISODate. ISODate được lưu trữ theo giờ UTC. Bạn có thể chỉ định một ngày cụ thể bằng cách truyền một chuỗi ngày ở định dạng ISO-8601 với năm nằm trong khoảng từ 0 đến 9999 vào hàm khởi tạo new Date() hoặc hàm ISODate(). Các hàm này chấp nhận các định dạng sau:

  • new Date("<YYYY-mm-dd>") trả về ISODate với ngày được chỉ định.
  • new Date("YYYY-mm-ddTHH:MM:ss") chỉ định thời gian trong múi giờ địa phương của máy khách và trả về ISODate với thời gian được chỉ định ở UTC.
  • new Date("YYYY-mm-ddTHH:MM:ssZ") chỉ định thời gian ở UTC và trả về ISODate với thời gian được chỉ định ở UTC.
  • new Date(<integer>) chỉ định thời gian dưới dạng số mili giây kể từ thời điểm UNIX epoch (Ngày 1 tháng 1 năm 1970), và trả về phiên bản ISODate tương ứng.

Hành Vi

Trong nội bộ, các đối tượng Date được lưu trữ dưới dạng số nguyên 64-bit có dấu, đại diện cho số mili giây kể từ thời điểm Unix epoch. Không phải tất cả các thao tác cơ sở dữ liệu và trình điều khiển đều hỗ trợ toàn bộ khoảng 64-bit. Tuy nhiên, bạn có thể an toàn làm việc với các ngày tháng có năm nằm trong khoảng từ 0 đến 9999.

Ví Dụ

Sử Dụng Date Trong Truy Vấn Nếu không có tài liệu nào với _id bằng 1 tồn tại trong bộ sưu tập sản phẩm, thao tác sau sẽ chèn một tài liệu với trường dateAdded được đặt thành ngày hiện tại:

javascript Copy
const timeAsMillisecond = Date.parse("2024-07-23 03:12:52");
const timeAsSecond = timeAsMillisecond / 1000;
console.log({
   timeAsMillisecond,
   timeAsSecond,
   myDate: new Date(timeAsMillisecond) // ISODate("2024-07-23T03:12:52.000+07:00")
})

db.cakeSales.insertMany( [
  { _id: 0, type: "input với ngày đầy đủ1", orderDate: new ISODate("2020-05-18T14:10:30Z") },
  { _id: 1, type: "input với ngày đầy đủ2", orderDate: new ISODate("2021-03-20T11:30:05Z") },
  { _id: 2, type: "input với ngày đầy đủ3", orderDate: new ISODate("2021-01-15T06:31:15Z") },
  { _id: 3, type: "ngày chỉ1 của tôi", orderDate: new ISODate("2021-01-15") },
  { _id: 4, type: "ngày và giờ:phút:giây của tôi", orderDate: new ISODate("2021-01-15T08:00:00") },
  { _id: 5, type: "ngày của tôi dưới dạng số", orderDate: new Date(timeAsMillisecond) },
] )

db.cakeSales.find({})
  .projection({})
  .sort({_id:-1})
  .limit(100)

Tham khảo.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào