Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 将对象从MongoDB游标流式传输到nodejs HTTP响应中_Json_Node.js_Mongodb_Httpresponse - Fatal编程技术网

Json 将对象从MongoDB游标流式传输到nodejs HTTP响应中

Json 将对象从MongoDB游标流式传输到nodejs HTTP响应中,json,node.js,mongodb,httpresponse,Json,Node.js,Mongodb,Httpresponse,注意:我不相信这个问题,因为它更具体 我试图使用nodejs mongodb驱动程序从Mongo检索多个对象,并将这些对象作为JSON写入HTTP响应。对象应该是数组的形式,但由于内存开销,我不想在游标上调用toArray(),我尽量避免使用大型的JSON.stringify调用 var response = ... // an http response collection.find().stream(JSON.stringify).pipe(response); // causes a m

注意:我不相信这个问题,因为它更具体

我试图使用nodejs mongodb驱动程序从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

有没有一种有效的方法可以做到这一点?

我将解释您编写的代码,以便您理解为什么它返回格式错误的JSON,以及为什么您可能需要
toArray()
或您发布的答案中的JSONStream库

第一个
collection.find()
返回一个
Cursor
对象。当时没有读取任何数据。然后,
.stream(JSON.stringify)
调用使用转换函数
JSON.stringify
返回一个可读的
stream
。仍然没有读取数据

然后,
.pipe(response)
调用读取整个
,并为每个对象调用
JSON.stringify
函数。请注意,它确实会分别为每个
对象调用它,因此不会创建
数组。取而代之的是格式错误的JSON,
object
object
之后

现在,您发布的问题中的答案尽可能重复()对您适用,但它需要一个带有
JSONStream
的额外库。JSONStream正确地处理
CursorStream
JSON
输出。我不知道这是否真的减少了开销,但是你可以试试


如果没有额外的库,您将不得不使用
toArray()

我知道它为什么格式不正确。我在寻求一种有效的方法来做到这一点。如果有一个额外的库,为什么不建议一个呢。你已经在问题的第一行发布了答案。我仍然认为toArray是有效的。你做过测试吗?图书馆在你认为不是复制品的问题的答案中。