2017-02-13 67 views
2

我在尝试从使用mongodb本机客户端的mongdb集合中获取10,000行时遇到了问题。它可以批量处理大约9700条记录,但不会返回任何更大批处理大小的数据。这里是代码片段..任何想法是什么阻止它?Node.js mongclient批处理大小

app.get('/aps/allclients' , function(req,res) { 
 

 
MongoClient.connect(url, function(err, db) { 
 
    var collection = db.collection('allclients'); 
 
    collection.find({},{"batchSize":10000}).toArray(function(err, docs){ // works for batch size 9700 or less but not 10000 
 
    
 
    res.send(JSON.stringify(docs)); 
 
    }); 
 
    db.close(); 
 
}); 
 

 
});

+0

对此有帮助吗? http://stackoverflow.com/questions/16080650/stream-query-results-with-the-native-mongodb-driver-for-node – balafi

+0

你可以在你的mongodb客户端订阅错误吗?日志中的任何内容?您可能只是拥有太多的数据,无论是在网络堆栈中还是在您的节点应用程序中。如所建议的那样,尽可能尝试流式传输结果。 – Zlatko

+0

限制您的最大批量为500!在实践中,200到300之间的范围是最有效的。 – Saleem

回答

0

您要关闭异步toArray完成之前,连接。

将回调,而不是内部的db.close()电话:

var collection = db.collection('allclients'); 
collection.find({}, {"batchSize":10000}).toArray(function(err, docs){ 
    res.send(JSON.stringify(docs)); 
    db.close(); 
}); 

这就是说,你不应该打开和关闭您的MongoClient连接池的每个请求。只需在应用程序启动时打开它,并在关闭时关闭它。

+0

谢谢约翰尼,那工作... –