Một số ý tưởng:
Bạn không cần $project
đầu tiên giai đoạn trong truy vấn. Và, bạn có thể bao gồm { "$toDate": "$originaltimestamp" }
trong nhóm $group
giai đoạn _id
, như bên dưới:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Giới thiệu về $push: "$$ROOT"
- thay vì $$ROOT
, chỉ chụp những trường bạn cần nhất (hoặc quan trọng). Điều này là để giảm việc sử dụng bộ nhớ. Ví dụ:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Cuối cùng, bạn có thể nghĩ đến việc hạn chế truy vấn cho một nhóm ngày vào thời điểm. Điều này sẽ yêu cầu chạy truy vấn nhiều hơn một lần cho các phạm vi ngày khác nhau - nhưng tôi nghĩ rằng nó có thể tốt hơn về tổng thể. Ví dụ:một tháng tại một thời điểm phù hợp với month
đồng ruộng. Và, month
có thể được lập chỉ mục cho hiệu suất. Điều này sẽ yêu cầu bao gồm một $match
ở đầu (giai đoạn đầu tiên) của truy vấn, ví dụ:
{ $match: { month: "202001" } }
Và, điều này sẽ truy vấn dữ liệu cho tháng 1 năm 2020.