Някои идеи:
Не се нуждаете от първия $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 г.