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

Mongoose报错:Model.findOne()不再接受回调函数,求解决方案

解决Mongoose Model.findOne() 不支持回调的报错

错误原因

你使用的Mongoose版本(6.x及以上)已彻底移除了findOne()方法对回调函数的支持,所有数据库查询方法现在仅返回Promise,必须用async/await或Promise链式调用处理结果。

修改后的代码(推荐用async/await)

const { SlashCommandBuilder } = require('@discordjs/builders');
const testSchema = require(`../../Schemas.js/test`);

module.exports = {
    data: new SlashCommandBuilder()
    .setName('dbtest')
    .setDescription('db test'),
    async execute(interaction) {
        try {
            // 用await获取查询结果,替代原回调写法
            const data = await testSchema.findOne({ 
                GuildID: interaction.guild.id, 
                UserID: interaction.user.id 
            });

            if (!data) {
                // 用await确保数据创建完成
                await testSchema.create({
                    GuildID: interaction.guild.id,
                    UserID: interaction.user.id
                });
                console.log('新用户数据已创建');
            } else {
                console.log('查询到用户数据:', data);
            }
        } catch (err) {
            // 捕获并处理数据库错误,避免程序崩溃
            console.error('数据库操作失败:', err);
        }
    }
}

关键修改点

  • 移除findOne()的回调参数,改用await直接获取返回结果
  • 用try/catch块包裹数据库操作,统一处理错误(替代原回调里的throw err,更安全)
  • 对create()操作也添加await,确保数据写入完成后再继续执行

可选:Promise链式调用写法

如果你习惯用Promise的.then()/.catch(),也可以这样写:

const { SlashCommandBuilder } = require('@discordjs/builders');
const testSchema = require(`../../Schemas.js/test`);

module.exports = {
    data: new SlashCommandBuilder()
    .setName('dbtest')
    .setDescription('db test'),
    execute(interaction) {
        testSchema.findOne({ GuildID: interaction.guild.id, UserID: interaction.user.id })
            .then(data => {
                if (!data) {
                    return testSchema.create({ GuildID: interaction.guild.id, UserID: interaction.user.id });
                }
                console.log('查询到用户数据:', data);
            })
            .then(() => {
                console.log('新用户数据已创建');
            })
            .catch(err => console.error('数据库操作失败:', err));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:43:10