You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js+MongoDB如何实现全局更新所有用户账户薪资数据

解决方案

你可以通过MongoDB提供的updateMany方法实现全量用户数据更新,修改后的完整代码如下:

const profileModel = require("../models/profileSchema");
module.exports = {
    name: 'pay',
    aliases: [],
    permissions: ["ADMINISTRATOR"],
    description: "pay users their salary",
    async execute(message, args, cmd, client, discord, profileData) {
        const amount = profileData.pay;

        try{
            await profileModel.updateMany(
                {}, // 空查询条件匹配集合内所有用户文档
                {
                    $inc: {
                        bank: amount,
                    },
                }
            );

            return message.channel.send(`所有用户薪资已发放完成。`);
        } catch(err) {
            console.log(err);
            return message.channel.send(`薪资发放失败,请查看控制台错误日志。`);
        }
    },
};

修改说明

  • 删除了原代码中获取提及用户的逻辑,不需要再@指定用户即可执行
  • 原本的findOneAndUpdate只能更新单条匹配到的文档,替换为updateMany方法后支持批量更新所有匹配文档
  • 第一个参数传空对象{}会匹配数据库中该集合下的所有用户记录,所有用户的bank余额都会增加设定好的薪资数额

可选优化&注意事项

  • 如果你的数据是多服务器共用同一个集合,希望只给当前触发命令的服务器用户发薪资,可以把第一个参数的空对象改成{ guildID: message.guild.id }(需要你对应的Schema里存了guildID字段),避免跨服务器发薪
  • 如果需要在发送的消息里展示实际发放的用户数量,可以调整代码:
    const updateRes = await profileModel.updateMany(
      {},
      { $inc: { bank: amount } }
    );
    return message.channel.send(`已成功向 ${updateRes.nModified} 位用户发放薪资。`);
    
  • 首次执行前建议先在测试环境验证金额逻辑,避免全量更新错误导致数据问题

内容的提问来源于stack exchange,提问作者Tyyppi155

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 00:27:03