Algunas ideas:
No necesitas el primer $project
etapa en la consulta. Y puede incluir el { "$toDate": "$originaltimestamp" }
dentro del $group
_id
de la etapa , como se muestra a continuación:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Acerca del $push: "$$ROOT"
- en lugar de $$ROOT
, captura solo los campos que más necesitas (o importantes). Esto es para reducir el uso de la memoria. Por ejemplo:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Finalmente, puede pensar en restringir la consulta para un conjunto de fechas a la vez. Esto requerirá ejecutar la consulta más de una vez para diferentes rangos de fechas, pero creo que puede funcionar mejor en general. Por ejemplo, un mes a la vez que coincida con el month
campo. Y, este month
se puede indexar para el rendimiento. Esto requerirá incluir un $match
etapa al principio (la primera etapa) de la consulta, por ejemplo:
{ $match: { month: "202001" } }
Y, esto consultará los datos del mes de enero de 2020.