Enkele ideeën:
Je hebt het eerste $project
niet nodig fase in de vraag. En u kunt de { "$toDate": "$originaltimestamp" }
opnemen binnen de $group
_id
. van stage , zoals hieronder:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Over de $push: "$$ROOT"
- in plaats van de $$ROOT
, leg alleen de velden vast die u het meest (of belangrijk) nodig heeft. Dit is om het geheugengebruik te verminderen. Bijvoorbeeld:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Ten slotte kunt u overwegen om de zoekopdracht voor een reeks datums op een bepaald moment te beperken. Hiervoor moet de query meer dan eens worden uitgevoerd voor verschillende datumbereiken, maar ik denk dat het over het algemeen beter zal gaan. Bijvoorbeeld een maand per keer dat overeenkomt met de month
veld. En deze month
kan worden geïndexeerd voor prestaties. Dit vereist een $match
fase aan het begin (de eerste fase) van de zoekopdracht, bijvoorbeeld:
{ $match: { month: "202001" } }
En dit zal gegevens opvragen voor de maand januari 2020.