【问题标题】:Mongoose returning Array value as "undefined" [duplicate]Mongoose将数组值返回为“未定义”[重复]
【发布时间】:2020-10-12 11:54:59
【问题描述】:

关于准备把我的笔记本电脑飞盘到这里的石膏板中。

我有一个包含几个不同对象和数组的 Mongo 文档。主要感兴趣的是categories 对象数组和bypass 字符串数组。

我正在使用model.findOne() 成功获取文档。文档的值存储在res 变量中,console.log(res) 显示正确的值而没有错误。我什至可以看到categoriesbypass 元素的内容。

当我将res.categories 分配给变量时,不会发生错误。万岁,作业的基础知识正在发挥作用。

当我将res.bypass 分配给一个变量时(紧接在上面的分配之后),变量值是undefined,即使我可以看到res.bypass 的内容包含一个设计的字符串数组。

res.bypass 的结构是bypass: [ '123', '456', '78', '90' ]。将该值分配给变量会将其设置为undefined

我在这里遗漏了什么吗?我是否不允许获取单个文档并将其不同元素分配给不同的变量?

编辑 1:

代码片段请求:

await Api.findOne({ id: '1' }).then(async (doc) => {

    console.log(doc.categories) // Categories Array of Objects
    console.log(doc.bypass) // Bypass Array of Strings

    const categories = doc.categories // Value is categories Array of Objects
    const bypass = doc.bypass // Value is undefined
    ...
})

【问题讨论】:

  • 我认为您应该包含您的实际代码或其中的一部分。用散文形式解释它可能会很有趣。但我认为代码是最容易掌握的(至少对于开发人员而言),嗯,以代码形式。
  • 你可能想检查你是否在你的赋值语句中正确地剥落了res.bypass
  • @thammada.ts 添加了代码 sn-p。
  • 这能回答你的问题吗? Can't access object property of a Mongoose response 您需要使用 .lean() 并确保您尝试访问的字段列在架构​​中..

标签: node.js mongodb mongoose


【解决方案1】:

无需将 promise 回调包装在 async 函数中,也无需在等待的 promise 上使用 then 处理程序。您应该将其更改为:

const doc = await Api.findOne({ id: '1' });

console.log(doc.categories) // Categories Array of Objects
console.log(doc.bypass) // Bypass Array of Strings

const categories = doc.categories // Value is categories Array of Objects
const bypass = doc.bypass // Value is undefined

【讨论】:

  • 感谢您的回复!不幸的是doc.bypass 仍然返回未定义。即使根 doc 显示 bypass: [ '123', '456', '78', '90' ]
  • “根”文档到底是什么意思?
  • 您是否 100% 确定 console.log(doc.bypass) 记录了预期值?可以加个截图吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-18
  • 2020-08-24
  • 2020-07-11
  • 1970-01-01
  • 2018-07-03
  • 2022-11-25
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多