[英]Mongoose bulk update/save
我读到Model.collection.insert
比Model.create
快。
我在1KK用户User.collection
,我要全部更新每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.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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.