我正试图通过使用Node本机Mongodb模块的流实现大规模的db.update()到我的Mongodb。
我得到的是这样的:
stream.on('data', function(data){
db.collection('my-db').update({_id:data.id},{$set:{notes:data.notes}},{upsert:true},
function(err,res){
if(err) throw err;
console.log(res);
})
})
我的流读取了一个超过150万行的csv文件,在完成之前就崩溃了。
我理解Async。虽然可以做到这一点,但我在使用它时遇到了问题。我试过了:
stream.on('data', function(data)
var counter = 0;
async.whilst(
function(){counter < 10;},
function(cb){
var docs = [];
counter++;
docs.push({id:data.id,notes:data.notes});
}
db.collection('my-db').update(docs[0],{$set:docs[0]},{upsert:true},function(err,res){
if(err)throw err;
console.log(res);
counter--;
})
function(err){
//do something
}
)
})
然而,这似乎并没有限制到我的数据库的连接,并使我的节点程序免于崩溃。
我通过使用async模块(特别是async.queue.
)克服了这个问题。我可以创建这个变量:
var q = async.queue(function(task, cb){
cb();
}, 50)
q.drain = function() {
console.log('all items have been processed');
}
From my stream:
q.push({name:dbUpdate}, function(err){
db.collection('my-db').update({id:data.id},{$set:{notes:data.notes}},{upsert:true},function(err,res){
//do something
})
})
我现在很肯定,我的问题更多的是在节点的mongodb-driver方面。
谢谢大家!
为了划分和征服这个问题,你如何排除从文件读取,只是循环超过150万"计数",或者从文件读取,但不调用mongodb。我想要得到的是弄清楚这是一个MongoDB驱动程序错误,还是异步错误。
Alex Lerner