[英]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.