用猫鼬查找文档并获取特定部分

时间:2020-05-04 10:15:45

标签: node.js mongodb mongoose discord.js

我将从描述我要实现的目标开始。我目前正在为Destiny 2家族开发一款Discord机器人,我要实现的命令之一是joinid命令,您将在其中使用该命令和@ user,它将返回用户steamID。不幸的是,discord bot无法访问不和谐用户的连接。我提出的解决方案是为氏族成员进行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,抽搐等),但据我所知,steamID是唯一的ID仅包含数字的17位数字,所以这就是我计划用来标识steamID的内容。 所以我要问的是,首先是否有一种方法可以使用discordId从数据库中获取实际文档,然后是否有一种方法可以轻松地从数组中选择实际的SteamID。

https://i.stack.imgur.com/JmeN3.png

1 个答案:

答案 0 :(得分:0)

首先,如果要查找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)
    });
}