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.