我将从描述我要实现的目标开始。我目前正在为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。
答案 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)
});
}