2017-02-13 125 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

謝謝約翰尼,那工作... –