いくつかのアイデア:
最初の$projectは必要ありません クエリのステージ。また、{ "$toDate": "$originaltimestamp" }を含めることができます $group内 ステージの_id 、以下のように:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
$push: "$$ROOT"について -$$ROOTの代わりに 、最も必要な(または重要な)フィールドのみをキャプチャします。これは、メモリ使用量を減らすためです。例:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
最後に、ある時点で一連の日付のクエリを制限することを検討できます。これには、さまざまな日付範囲に対してクエリを複数回実行する必要がありますが、全体的にはうまくいくと思います。たとえば、monthに一致する月 分野。そして、このmonth パフォーマンスのためにインデックスを付けることができます。これには、$matchを含める必要があります クエリの最初の段階(最初の段階)、例:
{ $match: { month: "202001" } }
そして、これは2020年1月のデータをクエリします。