2016-04-13 6 views
0

注:より具体的であるため、この質問はis a duplicate of this similar questionとは思えません。MongoDBカーソルからnodejsへのストリームオブジェクトHTTP応答

私はnodejs-mongodb-driverを使ってMongoから複数のオブジェクトを取得し、そのオブジェクトをJSONとしてHTTPレスポンスに書き込もうとしています。オブジェクトは配列の形でなければなりませんが、メモリオーバーヘッドのためにカーソルにtoArray()を呼びたくないので、可能な限り大量のJSON.stringifyコールを避けようとします。

var response = ... // an http response 
collection.find().stream(JSON.stringify).pipe(response); // causes a malformed JSON string 

ブラウザのオブジェクトは次のように表示されます。

{"obj", "obj"}{"obj", "obj"} // clearly malformed 

効率的な方法はありますか?

答えて

1

投稿したコードを説明して、不正な形式のJSONをなぜ返すのか、投稿した回答からtoArray()またはJSONStreamライブラリが必要な理由を理解します。

最初collection.find()Cursorオブジェクトを返します。この時点では、データは読み取られませんでした。次に、.stream(JSON.stringify)呼び出しは、変換機能JSON.stringifyで読み取り可能なStreamを返します。まだデータは読み込まれていません。

.pipe(response)コールは、最後にStreamの全体を読み取り、すべてのオブジェクトに対してJSON.stringify関数を呼び出します。それは本当にすべての単一のobjectのためにそれを呼び出すので、arrayを作成しないことに注意してください。代わりに JSONのobjectの後にobjectの後に不正な形式で表示されます。

あなたが投稿した質問の回答は、可能な限り重複しています(Stream from a mongodb cursor to Express response in node.js)が、あなたには役に立ちますが、JSONStreamの追加のlibaryが必要です。 JSONStreamはJSON出力の場合はCursorStreamを適切に処理します。私はそれが本当にオーバーヘッドを減らすかどうかは分かりませんが、あなたはそれを試すことができます。

追加ライブラリなしでtoArray()を使用する必要があります。

+0

私はその理由がわかっています。私はこれを行うための効率的な方法を求めています。追加のライブラリがあれば、それをお勧めしません。 – MatUtter

+0

あなたはすでに質問の最初の行にその回答を掲載しています。私はまだtoArrayが効率的だと思う。あなたはテストをしましたか?あなたが重複していないと思っていた質問の答えにライブラリがあります。 – x4rf41

関連する問題