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.