MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Errore di overflow della memoria quando si utilizzano query aggregate e $group

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.