use*_*996 5 stream mongodb node.js
我有一个包含 150 000 个项目的集合。我正在使用 cursor.stream() 来迭代它们。
“结束”事件总是过早地被触发,大约 15-20 000 个项目永远不会被流式传输。
没有错误事件或任何其他错误/异常。
游标是这样创建的:
return this.conn.find({},
{
timeout: false,
batchSize: 50,
maxTimeMS: 0,
fields: {
field1: 1,
field2: 1
}
});
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样(我删除了几个部分以保持简短,这是一种伪代码)
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);
});
});
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?如何流式传输所有项目?
提前致谢!