Cách chuẩn bị một đối tượng ngày Python được lưu trữ trong MongoDB và chạy các truy vấn theo ngày và phạm vi ngày Show Cách tôi quản lý để chèn ngày vào MongoDB và chạy truy vấn giữa các ngày Giới thiệu Tôi nghĩ một trong những điều tẻ nhạt nhất trong Khoa học Máy tính là xử lý ngày giờ và múi giờ. Nếu Khoa học máy tính chỉ sắp xếp các bản ghi theo ngày hoặc truy vấn DB cho các bản ghi được tạo giữa các khoảng ngày, thì tôi sẽ tự gọi mình ra khỏi trò chơi { Có hai vấn đề với cấu trúc trên. Đầu tiên là giá trị register_date được lưu dưới dạng Chuỗi. Nó không cho phép tôi truy vấn kết quả theo phạm vi ngày. Ngày được lưu trữ ở định dạng Chuỗi rất dễ hiển thị và giả sử ngày khớp với định dạng chuẩn, tương đối dễ chuyển đổi trở lại đối tượng ngày giờ nhưng tôi không thể chạy truy vấn như {“registration_date”: {“$gte”: ‘2021–03–03T18:12:07+00:00’, “$lte”: ‘2021–03–02T18:12:07+00:00’}} Vấn đề thứ hai là khá khó để truy vấn bằng ID ( e. g. 1f8741da011640988359fec4d47225f3), là khóa của mỗi từ điển lồng nhau. Về vấn đề này, bài viết này khá giải thích và giúp tôi hiểu được lỗi tôi mắc phải trong thiết kế dữ liệu ban đầu Tái cấu trúc dữ liệu để theo cách của MongoDBSau khi xem qua tài liệu về MongoDB, tôi nhận ra rằng cách lưu trữ dấu thời gian phù hợp là loại Ngày JavaScript. Giai đoạn = Stage Như đã báo cáo trong chính thức ,
MongoDB tự động gói ngày với chức năng. ISODate(). ISODate() là một hàm tích hợp bao bọc đối tượng Ngày JavaScript gốc, cung cấp một cách thuận tiện để biểu thị ngày ở định dạng con người có thể đọc được, duy trì việc sử dụng đầy đủ truy vấn ngày và lập chỉ mục Vì vậy, ngoài hộp, MongoDB cung cấp một đại diện ISO mặc định cho các ngày. Nếu bạn cần một định dạng khác với định dạng ISO, bạn cần tự chuyển đổi ở phía máy khách Hoàn hảo. Vì vậy, trước tiên tôi quyết định sửa đổi loại khóa register_date thành datetime chỉ để nhận ra rằng, với cấu trúc dữ liệu ban đầu của mình, không thể chỉ lấy lại các bản ghi phù hợp với tiêu chí truy vấn của tôi. Đó là một cấu trúc lồng nhau, vì vậy tất cả các cấu trúc đã được trả lại. Sau đó, tôi quyết định sửa đổi cấu trúc và làm cho nó đơn giản hơn. Nhiều bản ghi hơn để lưu trữ, nhưng dễ truy vấn hơn Để chèn ngày đăng ký dưới dạng ngày giờ Python, tôi đã sử dụng hàm payload_to_insert = { register_date bây giờ là một đối tượng datetime, nó được lưu trữ dưới dạng JavaScript Date type bởi MongoDB và sau đó nó tương thích với những gì MongoDB yêu cầu để chạy các truy vấn về ngày tháng Hơn nữa, ID từng là khóa bây giờ là giá trị của một thuộc tính. Tôi đã sửa cấu trúc dữ liệu và giúp truy vấn dễ dàng Để kiểm tra kỹ, chúng ta có thể chạy một truy vấn từ MongoDB shell để thấy rằng định dạng của register_date là Date() db.test.find() Bây giờ, hãy chơi với Python và hàm datetime để chạy một vài truy vấn Truy vấn theo phạm vi ngàyCó lẽ là một trong những truy vấn phổ biến nhất từ trước đến nay, “hãy cho tôi biết tất cả kết quả giữa hai ngày trên lịch”. Đó là lý do tại sao các thành phần như thế này https. //vật liệu. góc cạnh. io/thành phần/datepicker/ví dụ tồn tại Chúng tôi đã học được bài học của mình và chúng tôi biết rằng chúng tôi cần các đối tượng ngày giờ. Vì vậy, trước tiên hãy chuyển đổi một chuỗi thành một ngày giờ và sau đó tạo truy vấn của chúng tôi from datetime import datetime, timedeltafrom_date = datetime.strptime(from_date, '%Y-%m-%d') sau đó chúng ta có thể sử dụng các tiêu chí trong find() của mình import json Truy vấn theo một ngày cụ thểNếu tôi muốn tất cả các hành động được thực hiện vào một ngày nhất định thì sao? . 00 đến 23. 59. 59 cùng ngày from datetime import datetime, timedeltafrom_date_str = day_to_query + "T00:00:00+00:00" N. B. Tôi cần chỉ định múi giờ UTC vì theo mặc định, MongoDB lưu trữ các đối tượng Date() dưới dạng ISOFormat() Truy vấn với timedeltaMột cách hữu ích khác để truy vấn ngày là quay lại từ một số ngày nhất định from datetime import datetime, timedeltatoday = datetime.today()Tóm lại MongoDB ngày có thể gây ra một số thất vọng khi đến ngày để lưu trữ và truy vấn. Ngoài ra, cấu trúc dữ liệu lồng nhau không phải là người bạn tốt nhất của chúng tôi khi chúng tôi cần truy vấn nó. Tôi đã học được rằng không phải lúc nào đơn giản cũng dễ dàng. Lưu trữ một ngày dưới dạng Chuỗi đơn giản và dễ hình dung. Tuy nhiên, nó không dễ dàng hơn để truy vấn Tôi nên lưu trữ ngày tháng trong MongoDB như thế nào?Định dạng tốt nhất để lưu trữ ngày và giờ trong MongoDB là javascript Date() gốc hoặc định dạng ngày ISO vì định dạng này chuyển đổi nội bộ thành BSON .
Tôi có thể lưu trữ ngày dưới dạng chuỗi trong MongoDB không?MongoDB sẽ xử lý chúng như hiện tại - kiểu dữ liệu chuỗi. Và, các quy tắc so sánh chuỗi sẽ được áp dụng. Bạn có thể lưu trữ ngày tháng dưới dạng chuỗi một cách an toàn và truy vấn chúng miễn là chúng được định dạng đúng cho ngày tháng , i. e. , “YYYY-MM-ddTHH. mm. ss”.
Làm cách nào để đặt ngày hiện tại trong MongoDB?Chèn ngày hiện tại bằng MongoDB Compass . Bây giờ, hãy nhấp vào tổng hợp để chèn trường ngày hiện tại vào tài liệu bằng cách sử dụng đường dẫn tổng hợp Chọn giai đoạn $addFields để thêm trường mới DateField vào tài liệu hiện có Định dạng loại ngày trong MongoDB là gì?Định dạng ngày MongoDB dd/mm/yyyy
. Tùy chọn, trường định dạng được sử dụng cho đặc tả định dạng ngày. Tùy chọn, trường múi giờ được sử dụng cho múi giờ của kết quả thao tác. |