注意:我不相信这个问题is a duplicate of this similar question,因为它更具体。
我正在尝试使用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
有有效的方法吗?
最佳答案
我将解释您编写的代码,以使您理解为什么它返回格式错误的JSON,以及为什么您可能需要在发布的答案中使用toArray()
或JSONStream库。
第一个collection.find()
返回一个Cursor
对象。那时没有读取任何数据。然后,.stream(JSON.stringify)
调用返回具有转换函数Stream
的可读JSON.stringify
。仍然没有数据读取。
然后,.pipe(response)
调用将读取整个Stream
到末尾,并为每个对象调用JSON.stringify
函数。请注意,它确实确实单独为每个object
调用了它,因此不会创建array
。相反,您会在object
之后得到格式错误的JSON,即object
。
现在,在您发布为可能重复项(Stream from a mongodb cursor to Express response in node.js)的问题中的答案将对您有用,但是它需要带有JSONStream
的附加库。 JSONStream可以正确处理CursorStream
的JSON
输出。我不知道这是否真的可以减少开销,但是您可以尝试一下。
如果没有附加库,则必须使用toArray()
。
关于json - 将对象从MongoDB游标流式传输到NodeJS HTTP响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36605615/