节点服务器在超过1000个项目的对象上崩溃

时间:2013-07-17 00:09:48

标签: node.js mongodb crash mongoose

我有一个超过1000个项目的集合(1000个以下的项目没问题。),这会导致以下错误并在通过ajax调用请求时崩溃: (节点)警告:检测到递归process.nextTick。这将在下一版本的节点中中断。请使用setImmediate进行递归递延。

本地开发不会发生这种情况。 (实际上与本地开发无关。 我在本地计算机上运行了一个v0.10.0之前的版本,这个问题是在10.0后发布的。

我正在使用mongodb数据库和mongoose运行节点v0.10.8。

但什么是最佳解决方案?

参见代码:

 Collection.find().select('_id', 'first_name').sort('startTime', -1).exec(function(err,                 

  docs){

            var data = {'aaData' : docs};
            res.send(data);

        });

1 个答案:

答案 0 :(得分:4)

在结果集中有这么多文档时,你应该使用Mongoose对streaming查询结果的支持,而不是将它放在一个大数组中。

var stream = Collection.find()
    .select('_id', 'first_name')
    .sort('startTime', -1)
    .stream();

stream.on('data', function (doc) {
  // do something with the doc like res.write(doc);
}).on('error', function (err) {
  // handle the error
}).on('close', function () {
  // the stream is closed, so complete the response with res.end();
});