0
NodeJSを使用して、大規模な製品コレクションを繰り返し処理しています。 MongoDbネイティブドライバが使用されます。すべては問題ありませんが、すべての文書が処理された後にファイルにフッター行を書きたいと思います。どのように私はこれを達成することができますか?カーソルforeach関数の実行後にコールバックを起動しますか?
var MongoClient = require('mongodb').MongoClient
var assert = require('assert');
var filename = '/tmp/' + feed.outputFilename;
fs.writeFileSync(filename, feed.header, feed.encoding, function(err) {
if(err) throw err;
});
var url = process.env.DB_HOST;
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
var collection = db.collection('products');
var cursor = collection.find({ "catalog": "electronics"}, { "batchSize": 1,fields: {} }).forEach(function(product) {
if(product != null) {
var child = workers[Math.floor(Math.random()*workers.length)];
var data = {};
data.product = product;
data.feed = feed;
child.send(data);
}
}, function(err) {
assert.equal(null, err);
db.close();
});
// This doens't work for me (Error: Connot read property 'on' of undefined)
/*cursor.on('end', function() {
fs.appendFile('/tmp/' + filename, feed.footer, function(err) {
if(err) throw err;
});
db.close();
})*/
});
これを実現するために、mongoストリームインターフェイスを使用する関数を再構築しました。私はカーソル自体が終了イベントを発生させないと思います。 – Xaptor