Speichern von JSON-Daten von Node.js nach MongoDB

8

Ich ziehe Wetterdaten im JSON-Format von Wundground über ihre API ohne Probleme. Ich versuche, diese Daten zur späteren Verwendung in MongoDB zu speichern. Ich bekomme die Daten und kann sie in eine Sammlung in Mongo schreiben. Wenn ich jedoch eine db.collection.find () mache, sieht es fast so aus, als ob jedes einzelne Zeichen separat gespeichert wird und nicht das JSON-Format. Hier ist das Code-Snippet, das Daten erhält und in Mongo gespeichert werden sollte:

%Vor%

Ein kleiner Auszug der JSON-formatierten Wetterdaten:

%Vor%

Ich sollte nicht die Daten vor dem Speichern zu Mongo analysieren müssen, sollte ich? Also was vermisse ich. Wie gesagt, wenn ich alle Wetterdaten auf der Konsole ausspreche, scheint mir etwas zwischen Node.JS und MongoDB nicht zu funktionieren.

Danke.

UPDATE ***

Ich habe versucht, "str" ​​auf diese Weise mit

zu analysieren %Vor%

Das schien auch nicht zu funktionieren. Ich werde es nochmal anschauen.

    
Godfried 07.11.2013, 20:52
quelle

2 Antworten

12

Ja, Sie müssen Ihrer send -Funktion ein JavaScript-Objekt geben (vgl. MongoDB native Treiberdokumentation , die es so aussieht, wie Sie es benutzen, aber Sie senden ihm eine Zeichenkette (deshalb können Sie ihn für jedes data -Ereignis verketten). Sie müssen Ihre Zeichenfolge mit JSON.parse(str) in ein vollständiges Objekt konvertieren.

Wenn Sie sicher sein wollen, mit welchem ​​Datentyp Sie es zu tun haben, drucken Sie das Ergebnis von typeof str und typeof JSON.parse(str) .

Bearbeiten : Sie haben ein zweites Problem in Ihrem Code. Das response -Objekt ist eigentlich ein Stream , was bedeutet, dass es Daten aussendet, wenn es empfangen wird. Dies bedeutet auch, dass Sie das Ereignis data mehrmals erhalten können. Deshalb müssen Sie:

  1. Erstellen Sie eine leere Zeichenfolge
  2. Verknüpfen Sie für jedes data -Ereignis das gerade empfangene Chunk mit der Zeichenkette
  3. Versuchen Sie nur, es zu analysieren, wenn Sie sicher sind, dass Sie keine weiteren Daten erhalten.

In dem aktualisierten Code-Snippet, das Sie angegeben haben, haben Sie versucht, die Zeichenfolge beim ersten Datenereignis zu analysieren, aber das könnte eine unvollständige Zeichenfolge sein.

Hier ist der richtige Weg, dies zu erreichen:

%Vor%

Im Zusammenhang mit diesem Problem haben Sie auch einen Listener für das Ereignis end registriert, was gut ist, aber Sie haben für jedes data -Ereignis einen neuen Listener hinzugefügt! Das heißt, wenn Sie 5 Datenereignisse erhalten, rufen Sie die 5-fache Funktion auf, die das Objekt zu MongoDB hinzufügt ... Beachten Sie, dass ich im obigen Ausschnitt den response.on('end', function() {…}) außerhalb des response.on('data') -Rückrufs verschoben habe / p>     

Paul Mougel 07.11.2013, 21:03
quelle
-1
%Vor%

Referenz von: Ссылка

    
Ankit Jain 21.07.2016 09:36
quelle

Tags und Links