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

Mongoose无法保存Discord命令选项至MongoDB问题求助

问题原因与解决方案

核心问题:字段名大小写不匹配

你的MongoDB数据库无法保存新增选项数据,本质是Mongoose Schema定义的字段名与创建文档时使用的字段名大小写不一致:

  • Schema里定义的是Achievements(首字母大写)和TimeToComplete(首字母大写)
  • 但执行gameInfos.create()时传入的是小写的achievements和timetocomplete

Mongoose会严格按照Schema的字段规则存储数据,未在Schema中定义的字段(大小写不同会被判定为不同字段)会被自动忽略,因此这两个选项的数据无法存入数据库。

额外问题:imageURL参数获取错误

你在Discord命令中定义的选项名是全小写的imageurl,但代码中用options.getString("imageURL")(大小写混合)获取值,这会导致imageURL的值为undefined,同样无法正常存入数据库。

修正后的代码

主命令execute函数修正版

async execute(interaction) {
  const { options } = interaction;
  let currentDate = new Date();
  console.log(currentDate);
  const gameTitle = options.getString("gamename");
  const day = options.getInteger("releaseday");
  const month = options.getString("releasemonth");
  const year = options.getInteger("releaseyear");
  // 修正:选项名改为全小写的imageurl,与命令定义一致
  const imageURL = options.getString("imageurl");
  const achievements = options.getInteger("achievements");
  const timetocomplete = options.getInteger("timetocomplete");

  let releaseDate = `${month}/${day}/${year}`;

  let Difference_In_Time = new Date(releaseDate).getTime() - new Date(currentDate).getTime();
  let Difference_In_Days = Math.round(Difference_In_Time / (1000 * 3600 * 24));

  try {
    // 修正:字段名与Schema保持一致,首字母大写
    await gameInfos.create({
      Name: gameTitle,
      ReleaseDate: releaseDate,
      TimeToRelease: Difference_In_Days,
      ImageURL: imageURL,
      Achievements: achievements,
      TimeToComplete: timetocomplete
    });

    console.log(timetocomplete);
    await interaction.reply("游戏已成功添加到数据库!");
    console.log(
      `${chalk.bold.blue(
        "[LOG]"
      )} 已添加游戏发布提醒:${gameTitle},发布日期${day}/${month}/${year},距离现在还有${Difference_In_Days}天。`
    );
  } catch (error) {
    // 添加错误捕获,便于排查问题
    console.error(chalk.bold.red("[ERROR]"), "添加游戏失败:", error);
    await interaction.reply("添加游戏失败,请查看控制台日志。");
  }
},

补充建议

  1. 始终保持Schema字段名与代码中使用的字段名完全一致(包括大小写);
  2. 所有数据库操作建议包裹在try/catch块中,方便捕获并排查异常;
  3. 可以给Schema字段添加默认值,避免因参数缺失导致数据异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:22:31