Truy vấn bạn đang mô tả đang nhóm một loạt tài liệu theo ngày, khi những tài liệu đó chứa ngày giờ UTC.
MongoDB lưu trữ nội bộ ngày / giờ dưới dạng số mili giây kể từ ngày 1 tháng 1 năm 1970, do đó, bước đầu tiên sẽ cần tính toán ngày bắt đầu cho mỗi tài liệu, sau đó nhóm theo giá trị đầu ngày đó.
Nếu bạn đang sử dụng MongoDB 5.0, bạn có thể sử dụng $ dateTrunc nhà điều hành:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Đối với các phiên bản cũ hơn, bạn có thể tính toán đối tượng ngày đại diện cho ngày bắt đầu hoặc tạo một chuỗi chỉ chứa ngày.
Đối với tùy chọn chuỗi:
{$concat: [
{$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}
Vì vậy, về tổng thể, quy trình tổng hợp sẽ là:
- $ khớp để chọn tài liệu trong khung thời gian mong muốn
- $ project để tính thời gian bắt đầu trong ngày cho mỗi tài liệu
- $ nhóm vào đầu ngày, đếm số lần xuất hiện
- các giai đoạn tiếp theo để chuyển đổi tài liệu sang định dạng mong muốn