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:
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:
aggregateCursor
anstelle von aggregate
. Dies gibt einen Cursor statt eines einzelnen Dokuments zurück, das Sie dann über $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. 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%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.
Tags und Links mongodb