【问题标题】:Stream objects from MongoDB cursor into nodejs HTTP response将对象从 MongoDB 游标流式传输到 nodejs HTTP 响应中
【发布时间】:2016-04-14 02:09:55
【问题描述】:

注意:我不相信这个问题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 node.js mongodb httpresponse


    【解决方案1】:

    我将解释您编写的代码,以便您了解它为什么返回格式错误的 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 正确处理CursorStreamJSON 输出。我不知道这是否真的能减少开销,但你可以试试。

    如果没有附加库,您将不得不使用toArray()

    【讨论】:

    • 我知道它为什么格式不正确。我正在寻求一种有效的方法来做到这一点。如果有一个额外的库,你为什么不推荐一个。
    • 您已经在问题的第一行发布了该答案。而且我仍然认为 toArray 是有效的。你做过测试吗?该库在您认为不重复的问题的答案中。
    猜你喜欢
    • 2013-12-02
    • 2018-02-19
    • 2012-04-02
    • 2021-12-30
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多