Einige Ideen:
Sie brauchen das erste $project nicht Stufe in der Abfrage. Und Sie können den { "$toDate": "$originaltimestamp" } einfügen innerhalb der $group _id der Stufe , wie unten:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Über den $push: "$$ROOT" - anstelle von $$ROOT , erfassen Sie nur die Felder, die Sie am meisten (oder wichtig) benötigen. Dies soll die Speichernutzung reduzieren. Zum Beispiel:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Schließlich können Sie darüber nachdenken, die Abfrage auf eine Reihe von Daten zu einem bestimmten Zeitpunkt einzuschränken. Dies erfordert, dass die Abfrage mehr als einmal für verschiedene Datumsbereiche ausgeführt wird - aber ich denke, dass es insgesamt besser abschneiden kann. Zum Beispiel jeweils ein Monat, der dem month entspricht aufstellen. Und diesen month kann auf Leistung indiziert werden. Dazu muss ein $match eingefügt werden stage am Anfang (die erste Stufe) der Abfrage, zum Beispiel:
{ $match: { month: "202001" } }
Und dadurch werden Daten für den Monat Januar 2020 abgefragt.