MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Erro de estouro de memória ao usar consultas agregadas e $group


Algumas ideias:

Você não precisa do primeiro $project estágio na consulta. E você pode incluir o { "$toDate": "$originaltimestamp" } dentro do $group _id do estágio , como abaixo:
"_id": { 
    "$dateToString": { 
        "format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" } 
    } 
}

Sobre o $push: "$$ROOT" - em vez do $$ROOT , capture apenas os campos que você mais precisa (ou importante). Isso é para reduzir o uso de memória. Por exemplo:
"data": { 
    $push: { 
        "subscriber_id": "$subscriber_id",
        "type": "$type",
        // other required fields...
    } 
}

Finalmente, você pode pensar em restringir a consulta para um conjunto de datas por vez. Isso exigirá a execução da consulta mais de uma vez para diferentes intervalos de datas - mas acho que pode se sair melhor no geral. Por exemplo, um mês de cada vez correspondendo ao month campo. E, neste month pode ser indexado para desempenho. Isso exigirá a inclusão de um $match estágio no início (o primeiro estágio) da consulta, por exemplo:
{ $match: { month: "202001" } }

E, isso consultará os dados do mês de janeiro de 2020.