2017-02-13 5 views
2

mongodbネイティブクライアントを使用してmongdbコレクションから10,000行をフェッチしようとしているときに問題があります。これは約9700レコードのバッチサイズまで機能しますが、より大きなバッチサイズのデータ​​は返しません。ここにコードスニペット.. ..それを防ぐ何かアイデア??Node.js mongclient batchsize

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

ジョニー、ありがとう、ありがとう... –