游标foreach功能完成后的火回调?

时间:2017-02-05 16:31:03

标签: node.js mongodb

我正在使用NodeJS迭代大型产品系列。使用MongoDb本机驱动程序。一切都很好,但我想在处理完所有文件后写一个页脚行。我怎么能做到这一点?

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();
    })*/
});

1 个答案:

答案 0 :(得分:0)

可能会发生的情况是,您value来电中返回的forEach被分配到cursor var

尝试将value返回的find分配到cursor var,并将forEach称为cursor.forEach和{{1}以后。