Alcune idee:
Non hai bisogno del primo $project
fase della query. E puoi includere il { "$toDate": "$originaltimestamp" }
all'interno del $group
_id
della fase , come di seguito:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Informazioni su $push: "$$ROOT"
- al posto del $$ROOT
, acquisisci solo i campi di cui hai più bisogno (o importanti). Questo serve a ridurre l'utilizzo della memoria. Ad esempio:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Infine, puoi pensare di limitare la query per un insieme di date alla volta. Ciò richiederà l'esecuzione della query più di una volta per diversi intervalli di date, ma penso che nel complesso potrebbe andare meglio. Ad esempio, un mese alla volta che corrisponde al month
campo. E questo month
può essere indicizzato per le prestazioni. Ciò richiederà di includere un $match
fase all'inizio (la prima fase) della query, ad esempio:
{ $match: { month: "202001" } }
Inoltre, verranno interrogati i dati per il mese di gennaio 2020.