Mongo-Aggregation und MongoError: Ausnahme: BufBuilder hat versucht, auf 134217728 Bytes zu wachsen (über 64 MB)

9

Ich versuche, Daten aus meiner Mongo-Sammlung zu aggregieren, um einige Statistiken für FreeCodeCamp zu erstellen, indem ich eine große json-Datei der Daten für die spätere Verwendung anlege.

Ich stoße auf den Fehler im Titel. Es scheint nicht viele Informationen darüber zu geben, und die anderen Beiträge hier auf SO haben keine Antwort. Ich verwende die neueste Version von MongoDB und Treiber.

Ich vermute, dass es wahrscheinlich eine bessere Möglichkeit gibt, diese Aggregation auszuführen, aber es läuft für eine Teilmenge meiner Sammlung gut. Meine vollständige Sammlung ist ~ 7GB.

Ich führe das Skript über node aggScript.js > ~/Desktop/output.json Hier ist der relevante Code:

%Vor%     
tkbyte 25.12.2015, 23:57
quelle

3 Antworten

1

Aggregat gibt ein einzelnes Dokument zurück, das alle Ergebnisdaten enthält. Dadurch wird begrenzt, wie viele Daten an die maximale BSON-Dokumentgröße zurückgegeben werden können.

Vorausgesetzt, dass Sie alle diese Daten tatsächlich möchten, gibt es zwei Optionen:

  • Verwenden Sie aggregateCursor anstelle von aggregate . Dies gibt einen Cursor statt eines einzelnen Dokuments zurück, das Sie dann über
  • durchlaufen können
  • fügen Sie eine $out Bühne als letzte Stufe Ihres Spiels hinzu Pipeline. Dadurch wird mongodb angewiesen, Ihre Aggregationsdaten in die angegebene Sammlung zu schreiben. Der Befehl aggregate selbst gibt keine Daten zurück, und Sie fragen diese Sammlung dann ab, wie Sie es auch tun würden.
Frederick Cheung 29.01.2016, 07:25
quelle
1

Es bedeutet nur, dass das Ergebnisobjekt, das Sie erstellen, zu groß wurde. Diese Art von Problem sollte von der Version nicht beeinflusst werden. Der für 2.5.0 implementierte Fix verhindert nur den Absturz .

Sie müssen ($ match) richtig filtern, um die Daten zu erhalten, die Sie im Ergebnis benötigen. Auch mit geeigneten Feldern gruppieren. Die Ergebnisse werden in einen Puffer von 64 MB gebracht. Reduzieren Sie Ihre Daten. $ project nur die Spalten, die Sie als Ergebnis benötigen. Nicht ganze Dokumente.

Sie können Ihre 3 $ Match-Objekte zu einzelnen kombinieren, um Pipelines zu reduzieren.

%Vor%     
Somnath Muluk 29.01.2016 07:09
quelle
0

Ich hatte dieses Problem und konnte das Problem nicht beheben, weshalb ich den Aggregationsansatz aufgegeben habe. Stattdessen habe ich einfach jeden Eintrag durchgespielt und eine neue Sammlung erstellt. Hier ist ein abgespecktes Shell-Skript, das Ihnen helfen könnte zu sehen, was ich meine:

%Vor%

Ich kann mir nicht vorstellen, dass dieser Ansatz allen passt, aber hoffentlich hilft das jedem, der in meiner speziellen Situation war.

    
JoeRocc 12.05.2016 17:10
quelle

Tags und Links