Quelques idées :
Vous n'avez pas besoin du premier $project
étape dans la requête. Et, vous pouvez inclure le { "$toDate": "$originaltimestamp" }
dans le $group
_id
de l'étape , comme ci-dessous :
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
À propos du $push: "$$ROOT"
- au lieu du $$ROOT
, capturez uniquement les champs dont vous avez le plus besoin (ou les plus importants). Cela permet de réduire l'utilisation de la mémoire. Par exemple :
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Enfin, vous pouvez penser à restreindre la requête à un ensemble de dates à la fois. Cela nécessitera d'exécuter la requête plus d'une fois pour différentes plages de dates - mais je pense que cela pourrait mieux fonctionner dans l'ensemble. Par exemple, un mois à la fois correspondant au month
champ. Et ce month
peut être indexé pour la performance. Cela nécessitera d'inclure un $match
étape au début (la première étape) de la requête, par exemple :
{ $match: { month: "202001" } }
Et cela interrogera les données du mois de janvier 2020.