Làm cách nào để lưu trữ thời gian trong MongoDB?
Khi làm việc với ngày tháng trong MongoDB, bạn phải hết sức cẩn thận vì. MongoDB theo mặc định lưu trữ ngày & giờ trong đối tượng 2 ở dạng UTC/GMT. - không có bất kỳ dữ liệu múi giờ nào được thêm vào nó. Ý tưởng là - bạn chuyển đổi ngày theo múi giờ chính xác khi bạn truy vấn nó và hiển thị cho người dùng. Nếu bạn không làm điều đó - bạn sẽ có khoảng thời gian tồi tệ. Theo đúng nghĩa đen. . ) Ngày sinh không được chuyển đổi thành múi giờ địa phương mà phải được lưu dưới dạng UTC và được sử dụng làm UTC Show
lời nói đầuTôi bắt đầu viết tài liệu này như một lời nhắc nhở bản thân khi làm những thứ mongo Trong khi làm việc với thông tin ngày giờ trong bất kỳ cơ sở dữ liệu điện tử và ngôn ngữ lập trình nào, nơi bạn sống và nơi khách hàng của bạn sinh sống sẽ quyết định rất nhiều đến cách bạn tiếp cận thời gian, ngày tháng và múi giờ nói chung trong khi học hoặc phát triển Nếu bạn chỉ giao dịch với người dùng trong một múi giờ - rất có thể - bạn chưa bao giờ phải suy nghĩ đặc biệt về múi giờ nói chung. Bạn có thể gặp sự cố ánh sáng một hoặc hai lần một năm (ví dụ:. nếu bạn sống ở múi giờ tiết kiệm ánh sáng ban ngày thay đổi +/- 1 giờ nhiều lần trong một năm). Nhưng chủ yếu - bạn sẽ lưu trữ một số thời gian và ngày tháng và truy xuất chúng mà không gặp nhiều vấn đề Bạn thậm chí có thể lưu thông tin ngày và giờ của mình trong cơ sở dữ liệu ở định dạng dấu thời gian UNIX - mà không có bất kỳ thông tin múi giờ nào được thêm hoặc đặt dưới dấu thời gian (dấu thời gian Unix luôn dựa trên UTC/GMT và vd. không tính đến giây nhuận) Nếu bạn thực hiện hầu hết công việc lập trình phía máy chủ, trường hợp là ứng dụng & cơ sở dữ liệu của bạn đang hoạt động nội bộ với các ngày trong múi giờ của máy chủ của bạn. Nếu máy chủ của bạn nằm trong múi giờ của bạn - có thể bạn sẽ không nhận thấy bất cứ điều gì "tắt". Cho đến khi ánh sáng ban ngày tiết kiệm thời gian bắt đầu thay đổi và bạn bắt đầu nhận thấy trong các bản ghi cơ sở dữ liệu của mình có cùng dấu thời gian (khi chúng lặp lại) Không có vấn đề gì nếu bạn nghĩ rằng không có gì sai với khái niệm này bởi vì nó "hầu hết hoạt động" đối với bạn, mọi thứ với khái niệm này quá nhiều đến nỗi tài liệu này thậm chí không thể nắm bắt được một phần nhỏ của vấn đề Nếu ứng dụng của bạn có khách hàng từ nhiều múi giờ, phục vụ từ nhiều máy chủ từ nhiều trung tâm dữ liệu, thì việc bỏ qua các múi giờ sẽ không hiệu quả Hãy lấy một ví dụ sau về Người dùng X đã làm Y ở Châu Âu/Zagreb vào ngày 31-12-2021 lúc 23. 00. 00 (CET/UTC +1)
Nhưng những gì về ngày sinh bạn có thể yêu cầu? . Bạn ofc cần một bản gốc. Nhưng ngày được lưu ở dạng UTC và bạn đang ở New York và bạn không biết người dùng đó sinh ra ở đâu trên Trái đất cũng như ở múi giờ nào tài liệu MongoNgày()https. // tài liệu. mongodb. com/manual/reference/method/Date/ https. // tài liệu. mongodb. com/manual/tutorial/model-iot-data/ Bạn có thể chỉ định một ngày cụ thể bằng cách chuyển một chuỗi ngày theo tiêu chuẩn ISO-8601 với một năm trong phạm vi bao gồm từ 0 đến 9999 tới hàm tạo Date() mới hoặc hàm ISODate(). Các chức năng này chấp nhận các định dạng sau
Cư xửBên trong, các đối tượng Date được lưu trữ dưới dạng số nguyên 64 bit đã ký biểu thị số mili giây kể từ kỷ nguyên Unix (ngày 1 tháng 1 năm 1970) Không phải tất cả các hoạt động và trình điều khiển cơ sở dữ liệu đều hỗ trợ phạm vi 64 bit đầy đủ. Bạn có thể làm việc an toàn với ngày có năm trong phạm vi bao gồm từ 0 đến 9999 Lưu trữ cả UTC và múi giờ của người dùngTrong MongoDB, bạn có thể lưu trữ cả ngày hiện tại và phần bù của máy khách hiện tại từ UTC
Bạn có thể tạo lại giờ địa phương ban đầu bằng cách áp dụng phần bù đã lưu
Lưu trữ ngày và giờ dưới dạng đối tượng JavaScript [ { _id: ObjectId("61bdc7dbebc9fb604195c2e6"), dob: ISODate("1977-03-19T23:00:00.000Z") } ] 1Khi chèn ngày & giờ làm đối tượng 1, mà không chỉ định độ lệch múi giờ (Z), nếu ngày bạn đã chỉ định nằm trong khoảng thời gian tiết kiệm ánh sáng ban ngày - giờ được trừ/thêm vào để tạo UTC buộc ngày của bạn phải vào ngày trước đó
Bạn có thể chỉ định ngày UTC (chú ý Z) khi sử dụng đối tượng 1 hoặc sử dụng hoàn toàn đối tượng 2
Sẽ chèn
Lưu trữ ngày và giờ dưới dạng đối tượng db.test.insertOne({dob: new Date("1977-3-20")}) 2
0 1Một số lời khuyênNgày giờ truy vấn 2_______10_______3Hiển thị ngày không có thời gian trong MongoDBChuyển đổi một đối tượng ngày thành một chuỗi theo định dạng do người dùng chỉ định 4Múi giờ chấp nhận
5trả về - ngày UTC từ db và chuyển đổi thành UTC/GMT -5 giờ (24-5=19h) một ngày trước đó - 1977-03-19T19. 00. 00. 000Z Làm cách nào để lưu trữ dữ liệu thời gian trong MongoDB?MongoDB lưu trữ thời gian ở dạng UTC theo mặc định và sẽ chuyển đổi bất kỳ biểu thị giờ địa phương nào sang dạng này. Các ứng dụng phải vận hành hoặc báo cáo về một số giá trị thời gian địa phương chưa sửa đổi có thể lưu trữ múi giờ cùng với dấu thời gian UTC và tính toán thời gian địa phương ban đầu trong logic ứng dụng của chúng.
Làm cách nào để tiết kiệm thời gian hiện tại trong MongoDB?Bạn có thể cân nhắc lưu số phút dưới dạng trường số nguyên . Ví dụ: 8. 30 sẽ được quy đổi thành 8 giờ * 60 phút + 30 phút = 510 phút. Lưu 510 dưới dạng số trong MongoDB. Lưu câu trả lời này.
Làm cách nào để đặt thời gian trong MongoDB?Ngày() . new Date(" new Date(" Làm cách nào để chỉ lưu trữ thời gian không có ngày trong MongoDB?MongoDB không hỗ trợ ngày không có định dạng múi giờ. Cách khác để lưu trữ ngày không có múi giờ là sử dụng hai loại biểu diễn nhật ký. Đầu tiên là mili giây và thứ hai là ( . Đây là những cách có sẵn trong MongoDB để lưu trữ ngày không có múi giờ trong MongoDB. |