Některé nápady:
Nepotřebujete první $project
fázi v dotazu. A můžete zahrnout { "$toDate": "$originaltimestamp" }
v rámci $group
_id
fáze , jak je uvedeno níže:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
O $push: "$$ROOT"
- namísto $$ROOT
, zachyťte pouze pole, která potřebujete nejvíce (nebo důležitá). Je to kvůli snížení využití paměti. Například:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Nakonec můžete uvažovat o omezení dotazu na sadu dat v čase. To bude vyžadovat spuštění dotazu více než jednou pro různé rozsahy dat - ale myslím, že to může být celkově lepší. Například měsíc v čase odpovídající month
pole. A tento month
lze indexovat podle výkonu. To bude vyžadovat zahrnutí $match
fáze na začátku (první fáze) dotazu, například:
{ $match: { month: "202001" } }
A toto bude dotazovat data za měsíc leden 2020.