这是一种基于计数方法的潜在解决方案(我尚未测试过,也没有错误陷阱,但应该可以传达出这种想法)。
基本策略是:获取需要更新的记录数,异步保存每个记录,并在成功时进行回调,这将减少计数并在计数达到0(最后一次更新完成时)时关闭数据库。通过使用
{safe:true}我们可以确保每次更新均成功。
mongo服务器每个连接将使用一个线程,因此最好a)关闭未使用的连接,或b)池化/重用它们。
db.open(function (err, db) { db.collection('foo', function (err, collection) { var cursor = collection.find({}); cursor.count(function(err,count)){ var savesPending = count; if(count == 0){ db.close(); return; } var saveFinished = function(){ savesPending--; if(savesPending == 0){ db.close(); } } cursor.each(function (err, doc) { if (doc != null) { doc.newkey = 'foo'; // Make some changes db.save(doc, {safe:true}, saveFinished); } }); }) });});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)