(discord.js v14)MongoDB未保存用户不一致id正确

rqdpfwrv  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(141)

我保存用户的数据由他们的不和谐的ID到我的数据库,直到今天,我只使用它来获取他们的数据,但我试图获取用户由他们的ID保存到数据库,看到它找不到用户,因为在数据库中的ID是不正确的。
例如,如果用户id为358262932791885824,它会将其保存为358262932791885800,或者如果用户id为243422653547937792,它会将其保存为243422653547937800。我正在搜索解决方案,发现someone in this post说这是因为Number.MAX_SAFE_INTEGER,但我不理解它,无法找到该问题的解决方案。如果你能帮我了解情况,解决问题,我会很高兴的!

如果用户未在其discord ID上保存数据,则此代码将创建一个新ID

let kontrol = await user.findOne({discord_id: message.author.id});
        if (!kontrol) {
            let newUser = new user({
                discord_id: message.author.id,
                xp: 0,
                level: 0,
                money: 0,
                inventory: [],
                daily: {
                    last: 0,
                    next: 0
                },
                warnings: {
                    adWarn: 0
                }
            })
            await newUser.save();
        }

我的使用者结构描述

const mongoose = require('mongoose')
const user = new mongoose.Schema({
    discord_id: {
        type: Number,
        unique: true,
        required: true
    },

    xp: {
        type: Number,
        default: 0,
        required: true
    },

    level: {
        type: Number,
        default: 0,
        required: true
    },

    money: {
        type: Number,
        default: 0,
        required: true
    },

    inventory: {
        type: Array,
        default: [],
        required: true
    },

    daily: {
        last: {
            type: Number,
            default: 0,
            required: true
        },
        next: {
            type: Number,
            default: 0,
            required: true
        }
    },

    warnings: {
        adWarn: {
            type: Number,
            default: 0,
            required: true
        },
    }
});

module.exports = mongoose.model('user', user)
```js

Tried to save users datas with discord ids.
Data saved without error or problem but the discord id is not correct.
When i try to fetch data by id tho, theres no problem fetching it from database.
But when i try to fetch user by id from database, i cant.
balp4ylt

balp4ylt1#

这意味着discord_id应该是一个字符串。每个Discord ID/snowflake都应该存储为字符串。如果您将一个ID存储为整数,并且它大于Number.MAX_SAFE_INTEGER(2^53),则它将无法以数字类型表示,并且会被JavaScript转换为其他类型(例如将最后一个数字改为零)。

discord_id: {
  type: String,
  // ...
}

另请参阅Why is my query output showing something completely different than what it is in the database?Modified data when using sqlite3

相关问题