gpt4 book ai didi

javascript - Mongoose 批量更新/保存

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:43 25 4
gpt4 key购买 nike

我读到 Model.collection.insertModel.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 分钟,如何提高性能?

最佳答案

您现在执行此操作的方式是等待一件事被保存,然后再转到另一件事。您可以将其并行化(完全或部分)以使其更快完成。

您可以使用 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 设置为您想要的任何数字即可。

关于javascript - Mongoose 批量更新/保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com