【问题标题】:Finding a document in mongoose and fetching a specific part在 mongoose 中查找文档并获取特定部分
【发布时间】:2020-08-18 17:45:04
【问题描述】:

我将首先描述我想要实现的目标。我目前正在为我的 Destiny 2 Clan 开发一个不和谐的机器人,我正在尝试实现的命令之一是 joinid 命令,您可以在其中使用该命令和@一个用户,它会返回用户的 steamID。不幸的是,discord 机器人无法访问 discord 用户的连接。我想出的解决方案是为氏族成员进行 Oauth2 登录,当他们登录时,他们授权应用程序从 discord API 获取连接信息,然后将其保存在数据库中。 Oauth2 应用程序已完成并正在运行,问题在于机器人从数据库中获取数据。到目前为止,我只尝试了 Model.find,当我昨天尝试时,它返回的信息量远远超过包含的实际文档,但是今天它只返回 [object Object],所以我一定搞砸了代码。 可能值得一提的是,这是我的第一个 JavaScript 项目。

这是 MongoDB 文档的架构:

const UserSchema = new mongoose.Schema({
    discordId: {type: String, required: true},
    username: {type: String, required: true},
    connection: {type: Array, required: true}

});


const DiscordUser = module.exports = mongoose.model('User', UserSchema);

我附上了文档在数据库中的外观图片

这是我目前的命令代码:

if (cmd.includes("joinid")) {
        playerid = cmd.slice(10, -1);
        const steamidentifier = DiscordUser.find({ discordId: playerid});
        console.log(`${steamidentifier}`);
        
    }

通过查看图像,您可以看到每个连接都有单独的对象(即 Spotify、battle.net、steam、twitch 等)但据我所知,steamID 是唯一的 ID仅由数字组成的 17 位数字,所以这就是我计划用来识别 steamID 的。 所以我要问的是,是否有一种方法可以首先使用 discordId 从数据库中获取实际文档,然后是否有一种方法可以轻松地从数组中选择实际的 steamID。

【问题讨论】:

    标签: node.js mongodb mongoose discord.js


    【解决方案1】:

    首先,如果您要查找 1 个文档,那么我建议您改用 findOne()

    其次,您需要使用callback 函数来获取查询结果。

    if (cmd.includes("joinid")) {
        playerid = cmd.slice(10, -1);
        const steamidentifier = DiscordUser.findOne({
            discordId: playerid
        }, (err, res) => {
            console.log(res.connection.find(con => con.type === 'steam').id)
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2020-11-21
      • 1970-01-01
      • 2022-10-17
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多