我认为Model.collection.insert
比Model.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分钟以上的模式,如何才能提高性能?
答案 0 :(得分: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
到你想要的任何数字。