Json 将对象从MongoDB游标流式传输到nodejs HTTP响应中
注意:我不相信这个问题,因为它更具体 我试图使用nodejs mongodb驱动程序从Mongo检索多个对象,并将这些对象作为JSON写入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
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是有效的。你做过测试吗?图书馆在你认为不是复制品的问题的答案中。