mongoose批量更新/保存

我读了Model.collection.insertModel.create快。

我在User.collection中有1kk用户,我想每1分钟更新一次:这是我的代码:

 const mongoose = require('mongoose'); const User = require('./models/user'); const async = require('async'); function getRandomArbitrary(min, max) { return Math.round(Math.random() * (max - min) + min); } User.find({}, (err, docs) => { async.mapSeries(docs, (doc, callback) => { doc.value = getRandomArbitrary(0,100); doc.save((err) => { callback(err, doc); }); }, (err, result) => { if (err) return err; console.log('completed'); }); }); 

这是完成这个的好方法吗? 它需要1分钟以上的模式,如何提高性能?

你现在这样做的方式是等待一个事情被保存之前,去另一个。 您可以并行(完全或部分),使其更快完成。

您可以使用async.map而不是async.mapSeries使其并行工作。

或者,您可以使用async.mapLimit来限制同时进行的操作的数量。

看到:

async.map示例:

 User.find({}, (err, docs) => { async.map(docs, (doc, callback) => { doc.value = getRandomArbitrary(0,100); doc.save((err) => { callback(err, doc); }); }, (err, result) => { if (err) return err; console.log('completed'); }); }); 

async.mapLimit示例:

 const LIMIT = 10; User.find({}, (err, docs) => { async.mapLimit(docs, LIMIT, (doc, callback) => { doc.value = getRandomArbitrary(0,100); doc.save((err) => { callback(err, doc); }); }, (err, result) => { if (err) return err; console.log('completed'); }); }); 

只要LIMIT到任何你想要的数字。