Mongodb光标过早发出“结束”(NodeJS)

时间:2016-02-03 22:47:23

标签: node.js mongodb stream

我有一个包含15万件物品的藏品。 我正在使用cursor.stream()迭代它们。

“结束”事件总是太早被解雇,大约15-20,000件物品从未流式传输。

没有错误事件或任何其他错误/异常。

光标创建如下:

return this.conn.find({},

    {
        timeout: false,
        batchSize: 50,
        maxTimeMS: 0,
        fields: {
            field1: 1,
            field2: 1
        }
    });

我的代码看起来像这样(我删除了几个部分以保持简短,这是一种伪代码)

var cursor = self.db.SomeCollection.getCursor();
cursor.limit(0);
cursor.skip(0);
cursor.maxTimeMS(0);
cursor.batchSize(50);

var stream = cursor.stream();

cursor.count(function(err,cnt) {

    self.logger.info('Processing %d items',cnt);

    var bar = new ProgressBar(':bar :percent complete (:elapseds)', {
        total: cnt,
        width: 100
    });

    stream.on('data',function(item) {

        stream.pause();

        self.db.OtherCollection.findStuff(item.prop, function(err,user) {

            // some processing...

            self.db.OtherCollection.updateStuff(item.ptop,data,function(err,upd) {

                // more processing...

                bar.tick();
                stream.resume();

            });
        });
    });

    stream.on('end',function() {
        console.log();
        self.logger.info('Done');
        process.exit(0);
    });

    stream.on('error',function(err) {
        self.error('Mongodb operation failed',err);
    });

});

这是一个错误吗?我如何流式传输所有项目?

提前致谢!

0 个答案:

没有答案