我有一个超过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);
});
答案 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();
});