mongodb 错误:并行保存错误:同一单据不能并行多次保存()

zpf6vheq  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(284)

出现错误。我无法确定是什么原因导致mongodb中出现此错误

错误如下:

UnhandledPromiseRejectionWarning: ParallelSaveError: Can't save() the same doc multiple times in parallel. Document: 60df55dea691a919b4deca21

产生错误的代码是:

const serverModel = require('../../models/serverSchema');
module.exports = {
    name: 'hangup',
    description: 'hangup on someone if they like eating cereal with a fork!',
    category: 'fun',
    aliases: global.aliases.fun.hangup,
    cooldown: 5,
    // Umm code i guess
    async execute(message, args, client, serverData) {
        if (serverData.calling == 'connected') {
            console.log('die');
            const OtherPerson = await serverModel.findOne({ talkingWith: serverData.serverID });
            if (OtherPerson) {
                OtherPerson.talkingWith = null;
                OtherPerson.lastMsg = null;
                OtherPerson.calling = 'hangup';
                OtherPerson.save();
            }

        }
        serverData.calling = 'no';
        serverData.channel = '';
        serverData.lastMsg = '';
        serverData.talkingWith = '';
        serverData.save(); //The error brings me here
        message.channel.send(':bangbang:**__Hangingup__ bye bye**:bangbang:');
    },
};

我不知道是什么导致了这个错误。我很确定这个错误不是来自任何其他脚本
这是serverData的数据库当前的外观:

talkingWith: '860785717882126356'; // Id of a discord server
channel: '856912495737307137'; // Id of a discord channel
calling: 'connected';
lastMsg: null;

我不打算添加OtherPerson数据库的结构,因为它是未知的,但它看起来确实与ServerData相似

7cwmlq89

7cwmlq891#

我发现问题了。
问题是代码在一行中运行命令serverData.save()的次数太多。
为了解决这个问题,我添加了一个if语句来检查数据是否已经保存。

相关问题