繁体   English   中英

猫鼬批量更新/保存

[英]Mongoose bulk update/save

我读到Model.collection.insertModel.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM