簡體   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