在 mongoose 中查找文档并获取特定部分
Posted
技术标签:
【中文标题】在 mongoose 中查找文档并获取特定部分【英文标题】:Finding a document in mongoose and fetching a specific part 【发布时间】: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。
【问题讨论】:
【参考方案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)
);
【讨论】:
以上是关于在 mongoose 中查找文档并获取特定部分的主要内容,如果未能解决你的问题,请参考以下文章
如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?
通过 Mongoose、Node.js、MongodB 中的特定属性查找嵌入式文档
使用 Mongoose 查找子文档字段部分匹配给定条件的文档