sql >> Database >  >> NoSQL >> MongoDB

Geheugenoverloopfout bij gebruik van aggregatie- en $groepsquery's

Enkele ideeën:

Je hebt het eerste $project niet nodig fase in de vraag. En u kunt de { "$toDate": "$originaltimestamp" } opnemen binnen de $group _id . van stage , zoals hieronder:

"_id": { 
    "$dateToString": { 
        "format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" } 
    } 
}

Over de $push: "$$ROOT" - in plaats van de $$ROOT , leg alleen de velden vast die u het meest (of belangrijk) nodig heeft. Dit is om het geheugengebruik te verminderen. Bijvoorbeeld:

"data": { 
    $push: { 
        "subscriber_id": "$subscriber_id",
        "type": "$type",
        // other required fields...
    } 
}

Ten slotte kunt u overwegen om de zoekopdracht voor een reeks datums op een bepaald moment te beperken. Hiervoor moet de query meer dan eens worden uitgevoerd voor verschillende datumbereiken, maar ik denk dat het over het algemeen beter zal gaan. Bijvoorbeeld een maand per keer dat overeenkomt met de month veld. En deze month kan worden geïndexeerd voor prestaties. Dit vereist een $match fase aan het begin (de eerste fase) van de zoekopdracht, bijvoorbeeld:

{ $match: { month: "202001" } }

En dit zal gegevens opvragen voor de maand januari 2020.




  1. Er is een time-out opgetreden bij de serverselectie na 10000 ms - Kan Compass niet verbinden met mongoDB op localhost

  2. Hoe verbind ik Django Rest-api met MongoDB?

  3. Welke eenheid wordt gebruikt om het CPU-gebruik van Redis weer te geven?

  4. Sessies maken in Node.js