赋值给变量后数据异常求助(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
相关产品推荐
相关产品推荐

