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

赋值给变量后数据异常求助(Discord.js+Mongoose场景)

排查Discord.js用户ID赋值Mongoose后数据异常的问题

我来帮你定位这个赋值后数据变化的问题,结合你给出的代码,大概率是数据类型不匹配或者Mongoose Schema定义的问题,咱们一步步来排查:

1. 优先检查Mongoose Schema的字段类型

Discord的用户ID虽然看起来是数字,但Discord.js返回的taggedUser.id实际上是字符串类型(Discord所有ID都是字符串格式的雪花ID)。如果你的Message Schema里把message.to定义成了Number类型,Mongoose在处理的时候会自动尝试把字符串转成数字,这就会导致数据变形(比如超长ID转数字会变成科学计数法,甚至NaN)。

你可以打开../app/models/message.js,确认message.to的类型定义:

// 正确的定义应该是String类型
const messageSchema = new mongoose.Schema({
  message: {
    to: { type: String, required: true },
    // 其他字段...
  },
  // 其他模型结构...
});

2. 验证数据类型是否匹配

在代码里添加类型打印,确认赋值前后的类型变化:

const taggedUser = message.mentions.users.first();
console.log("taggedUser.id类型:", typeof taggedUser.id); // 应该输出 "string"
newMessage.message.to = taggedUser.id;
console.log("newMessage.message.to类型:", typeof newMessage.message.to);

如果后者输出的是number,那肯定是Schema类型定义错了,改成String就能解决。

3. 排查Mongoose中间件是否篡改数据

检查你的Message模型有没有定义pre('save')或者其他钩子函数,这些中间件可能在保存前自动修改了message.to的值。比如有些开发者会写钩子处理数据格式,不小心就会篡改ID。

4. 临时验证方案

如果暂时不确定Schema问题,可以手动将ID转为字符串再赋值,测试是否还会出现数据变化:

newMessage.message.to = String(taggedUser.id);

如果这样赋值后数据正常,那基本可以确定是Schema类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:46