MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Speicherüberlauffehler bei Verwendung von Aggregat- und $group-Abfragen

Einige Ideen:

Sie brauchen das erste $project nicht Stufe in der Abfrage. Und Sie können den { "$toDate": "$originaltimestamp" } einfügen innerhalb der $group _id der Stufe , wie unten:

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

Über den $push: "$$ROOT" - anstelle von $$ROOT , erfassen Sie nur die Felder, die Sie am meisten (oder wichtig) benötigen. Dies soll die Speichernutzung reduzieren. Zum Beispiel:

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

Schließlich können Sie darüber nachdenken, die Abfrage auf eine Reihe von Daten zu einem bestimmten Zeitpunkt einzuschränken. Dies erfordert, dass die Abfrage mehr als einmal für verschiedene Datumsbereiche ausgeführt wird - aber ich denke, dass es insgesamt besser abschneiden kann. Zum Beispiel jeweils ein Monat, der dem month entspricht aufstellen. Und diesen month kann auf Leistung indiziert werden. Dazu muss ein $match eingefügt werden stage am Anfang (die erste Stufe) der Abfrage, zum Beispiel:

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

Und dadurch werden Daten für den Monat Januar 2020 abgefragt.