Några idéer:
Du behöver inte det första $project steg i frågan. Och du kan inkludera { "$toDate": "$originaltimestamp" } inom $group stegets _id , enligt nedan:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Om $push: "$$ROOT" - istället för $$ROOT , fånga bara de fält du behöver mest (eller viktigast). Detta för att minska minnesanvändningen. Till exempel:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Slutligen kan du tänka på att begränsa frågan för en uppsättning datum i taget. Detta kommer att kräva att du kör frågan mer än en gång för olika datumintervall - men jag tror att det kan bli bättre totalt sett. Till exempel en månad i taget som matchar month fält. Och den här month kan indexeras för prestanda. Detta kommer att kräva att inkludera en $match steg i början (det första steget) av frågan, till exempel:
{ $match: { month: "202001" } }
Och detta kommer att fråga efter data för januari månad 2020.