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.