我有一个包含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);
});
});
这是一个错误吗?我如何流式传输所有项目?
提前致谢!