node.js - 使用 Mongoose 从 MongoDB 返回单个键
问题描述
我唯一想做的就是messages
在 Express 中使用 Mongoose 从 MongoDB 返回密钥,但这证明它应该更困难,主要是因为所有旧的答案和这样做的方法。因此,尽管最好四处打听,并为任何试图实现相同目标的人留下一些东西。
这是包含消息键的模式:
const UserMessagesScheme = new mongoose.Schema({
email: {
type: String,
required: true
},
messages: {
type: Object,
required: true,
default: {}
}
}, {minimize: false});
我试过的:
const messages = await Messages.findOne({email}, general).schema.paths.messages;
const messages = await Messages.findOne({email}, general).schema.tree.messages;
const messages = await Messages.findOne({email}, general).lean().messages;
const messages = await Messages.findOne({email}, general).lean().exec((err, res) => res.messages);
const messages = await Messages.findOne({email}, general).lean().exec((err, res) => res._doc.messages);
const messages = await Messages.findOne({email}, general).lean().exec((err, res) => res.toObject().messasges);
// And a heck of a lot more...
console.log(resData.messages);
什么有效?
const messages = await Messages.findOne({email}, general).then(res => res.messages);
console.log(resData.messages);
虽然我已经设法让它与.then()一起工作,但我不太确定它是否实用,因为你可能会说这行代码是在异步函数内部执行的,因此我想找到一种通过使用相同的实现来保持清洁的方法。
另一种可行的方法是这样的:
const messages = await Messages.findOne({email}, general).lean();
const messagesFromMessages = messsages.messages;
console.log(resData.messages);
我很确定我错过了一些东西,并且我需要一些知识才能掌握这一点,因此,由于其他人可能会再次遇到这个问题,我真的很喜欢一些文档链接或解释的东西除了代码示例之外,我不知道的是:这是你应该做的,拜托。
为一切加油!
解决方案
Mongoose 模型findOne
返回一个需要等待或继续使用.then()
/ 回调样式的承诺。在您的所有情况下,等待gets
整个方法调用链/字段读取后应用,因此您需要括号来强制await
首先执行并返回数据库响应。否则,您正在尝试从待处理的承诺中读取(在数据库产生结果之前),请尝试:
(await Messages.findOne({email}, general)).messages
或者
let databaseResponse = await Messages.findOne({email}, general)
let messagse = databaseResponse.messages;
推荐阅读
- python - 如何在不通过 MQTT 订阅的情况下保存数据值?
- swift - Swift 中有内置的堆栈实现吗?
- pip - 使用安装工具打包后导入错误
- javascript - 如何从随机选择中排除数组元素
- r - 如何将数据帧随机拆分为行,但每个集群在 R 中的值的累积和完全相同
- java - 从 Applications/app.app 运行 jar 的 MacOS 在加载 .fxml 期间以不正确的路径错误结束
- python - 如何使用 SimpleImputer 类在具有不同常量值的不同列中估算缺失值?
- javascript - 从对象列表中选择唯一的子对象并使用 Ramda 转换它们
- python - 为什么 np.pad 没有按我期望的方式工作?
- ios - 在另一个视图控制器中更改对象的属性