Bạn không thể sử dụng toán tử tổng hợp ngày
trên bất kỳ thứ gì khác là Date
đối tượng chính nó. Tùy chọn tốt nhất cuối cùng của bạn là chuyển đổi các "chuỗi" này thành Date
các đối tượng để bạn có thể truy vấn chính xác trong các hoạt động này và trong tương lai.
Điều đó nói rằng, nếu "chuỗi" của bạn luôn có cấu trúc chung thì có một cách để thực hiện việc này với khung phân loại
công cụ. Nó đòi hỏi nhiều thao tác suy nghĩ không làm cho đây là một cách tiếp cận "tối ưu" để giải quyết vấn đề. Nhưng với cấu trúc tập hợp "chữ số kép" và dấu phân cách nhất quán, điều này có thể xảy ra với $substr
nhà điều hành:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$substr": [ "$dateStr", 7, 4 ] },
"month": { "$substr": [ "$dateStr", 4, 2 ] }
},
"count": { "$sum": 1 }
}}
])
Vì vậy, việc ép kiểu JavaScript không hoạt động bên trong khuôn khổ tổng hợp. Bạn luôn có thể "cấp" đầu vào cho đường ống dựa trên đánh giá "mã khách hàng", nhưng bản thân quá trình tổng hợp không đánh giá bất kỳ mã nào. Cũng giống như công cụ truy vấn cơ bản, tất cả đều dựa trên triển khai "cấu trúc dữ liệu" sử dụng hướng dẫn "toán tử gốc" để thực hiện công việc.
Bạn không thể chuyển đổi chuỗi thành ngày tháng trong quy trình tổng hợp. Bạn nên làm việc với BSON Date
thực
nhưng bạn có thể làm điều đó với chuỗi nếu có một định dạng nhất quán mà bạn có thể trình bày theo "thứ tự từ vựng".
Tôi vẫn khuyên bạn nên chuyển đổi những điều này thành BSON Dates
CÀNG SỚM CÀNG TỐT. Và hãy cẩn thận rằng giá trị "ISODate" hoặc UTC được xây dựng với một dạng chuỗi khác. tức là:
new Date("2020-01-07")
Ở định dạng "yyyy-mm-dd". Ít nhất là đối với lệnh gọi JavaScript.