MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Erreur de dépassement de mémoire lors de l'utilisation de requêtes agrégées et $group

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.