Kilka pomysłów:
Nie potrzebujesz pierwszego $project etap zapytania. Możesz też dołączyć { "$toDate": "$originaltimestamp" } w ramach $group _id etapu , jak poniżej:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Informacje o $push: "$$ROOT" - zamiast $$ROOT , przechwytuj tylko te pola, których potrzebujesz najbardziej (lub ważne). Ma to na celu zmniejszenie zużycia pamięci. Na przykład:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Na koniec możesz pomyśleć o ograniczeniu zapytania do zestawu dat w czasie. Będzie to wymagało wielokrotnego uruchomienia zapytania dla różnych zakresów dat — ale myślę, że ogólnie rzecz biorąc, może być lepiej. Na przykład miesiąc na raz pasujący do month pole. I ten month mogą być indeksowane pod kątem wydajności. Będzie to wymagało uwzględnienia $match etap na początku (pierwszy etap) zapytania, na przykład:
{ $match: { month: "202001" } }
Spowoduje to zapytanie o dane za styczeń 2020 r.