Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义

2023-12-01

我是否缺少一些东西可以允许项目记录为带有参数的对象,但是当我尝试访问该参数时,它是未定义的?

到目前为止我尝试过的:

  • console.log(item) => { title: "foo", content: "bar" }, 没关系
  • console.log(typeof item)=> 对象
  • console.log(item.title)=>“未定义”

我将包含一些上下文,以防它与问题相关。

var TextController = function(myCollection) {
  this.myCollection = myCollection
}

TextController.prototype.list = function(req, res, next) {
  this.myCollection.find({}).exec(function(err, doc) {
    var set = new Set([])
    doc.forEach(function(item) {
      console.log(item)         // Here item shows the parameter
      console.log(item.title)   // "undefined"
      set.add(item.title)       
    })
    res.json(set.get());
  })
}

根据我放弃的建议debugger在此行之前通过节点 repl 调试器检查实际是什么项目。这是我发现的:http://hastebin.com/qatireweni.sm

从这里我尝试过console.log(item._doc.title)它工作得很好......所以,这现在看起来更像是一个猫鼬问题。

有与此类似的问题,但它们似乎与对象的“this”访问有关,或者它们试图将对象获取到函数范围之外。在这种情况下,我认为我没有做其中任何一个,但如果我错了请告诉我。谢谢


Solution

您可以致电toObject方法来访问字段。例如:

var itemObject = item.toObject();
console.log(itemObject.title); // "foo"

Why

正如你指出的那样真实字段存储在_doc文档的字段.

But why console.log(item) => { title: "foo", content: "bar" }?

From mongoose源代码(document.js),我们可以发现toString的方法Document打电话给toObject方法。所以console.log将“正确”显示字段。源码如下所示:

var inspect = require('util').inspect;

...

/**
 * Helper for console.log
 *
 * @api public
 */
Document.prototype.inspect = function(options) {
  var isPOJO = options &&
    utils.getFunctionName(options.constructor) === 'Object';
  var opts;
  if (isPOJO) {
    opts = options;
  } else if (this.schema.options.toObject) {
    opts = clone(this.schema.options.toObject);
  } else {
    opts = {};
  }
  opts.minimize = false;
  opts.retainKeyOrder = true;
  return this.toObject(opts);
};

/**
 * Helper for console.log
 *
 * @api public
 * @method toString
 */

Document.prototype.toString = function() {
  return inspect(this.inspect());
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义 的相关文章

  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 我们可以在Azure网站或虚拟机中运行windowservice或EXE吗?

    我有使用 Azure 上的云服务 托管服务的经验 然而 关于另一个项目 我对功能的选择感到困惑 我有一个项目 2层asp net应用程序 我需要运行windowservice或exe 它每天都会执行一些功能 如获取数据 所以我的困惑如下 关
  • 按列组合 CSV 文件

    假设我有两个 CSV 文件 名为A and B in Python A s head好像 headerNameA1 headerNameA2 1 12412424 1 1 1 1 1 1 1 B s head好像 headerNameB1
  • 调用 getExtra 时 Boolean 将自身重置为 false

    当我为 isDeleted 布尔值调用 getExtras getBoolean key 时 它不断将自身设置为 false 即使我传递的是 true 关于为什么会发生这种情况的任何见解 我尝试了很多其他方法 但没有成功地保持布尔值 TRU
  • 无法加载从笔尖引用的“my-icon.png”图像(iPhone)

    我收到以下错误消息 2011 02 11 14 47 13 815 myProject 13177 207 Could not load the icon troubleshoot png image referenced from a n
  • Tegra 3 设备上的 OpenGL 扩展

    我想知道新的 Tegra 3 设备上有哪些新的 OpenGL ES 扩展 有人愿意发布他们的设备名称 OpenGL 版本和扩展列表 仅限 Tegra 3 设备 吗 我认为其他开发人员也可以使用它 在 Android 上 您可以执行以下操作
  • JPanel 中的多个动画(线程)

    我正在尝试用 Java 编写棋盘游戏 我有 11 个类 包括主类 Board 类 扩展 JPanel 并绘制棋盘图像和骰子图像 Player 类扩展了 JCoponent 并实现了 Runnable Thread 每个玩家实例都是一个在棋盘
  • 使用 CarrierWave 和 Rails 设置 Froala WYSIWYG 编辑器

    我一直在努力让 Froala 充分利用我的 Rails 设置 我有一种类似博客的应用程序 其中包含与每个帖子相关的帖子和 图像 class Post lt ActiveRecord Base has many images accepts
  • 发现元素何时插入到 std::map

    我的程序正在将一些数据 地址 插入 使用 运算符 到 std map 中 我可以跟踪 137 个元素的插入 它们都插入了有效值 在某个阶段 我迭代地图并尝试对值 地址 进行一些操作 我在开始迭代地图之前设置了一个断点 当我在调试器中检查地图
  • 使用 NSScanner 查找短语的下一个匹配项

    我使用以下代码在 HTML 文件中查找特定代码行 NSURL requestTimetableURL NSURL URLWithString http www dhsb org index phtml d 201435 NSLog Load
  • 当我可以通过引用子类访问所有方法时,为什么还要引用基类呢?

    我正在学习java概念 我对java继承概念有疑问 在继承中 我们可以将子类实例分配给基类引用 这样我们就只能访问基类函数 我们可以将继承层次结构中的任何子类实例分配给基类引用 对于分配给特定基类引用的实例类型 我们只能访问基类函数 我没有
  • 通过手机浏览器检索 IMEI 号码/ SIM 号码/手机号码

    以下是场景 我有一个可通过移动浏览器访问的网络应用程序 每当用户单击可通过网络浏览器访问的应用程序页面中的链接时 我需要检测移动设备 IMEI 和 sim IMSI 这是为了跟踪具有相同 SIM 卡的同一设备并为他 她提供下一级访问权限 无
  • 使用 C# 和 COM 提取 InDesign CS4 图形

    我正在尝试获取 InDesign 文件中图形的详细信息 出于技术原因 我使用 COM 不是我最喜欢的 因为 在 StackOverflow 的其他地方讨论过 你必须花半生的时间来选角 理论上 下面的代码片段应该可以工作 智能感知显示AllG
  • 获取有关操作系统的详细信息

    我认为这很容易 但我无法弄清楚 如何判断使用的是Win7还是WinXP 比如操作系统的详细信息 Linux 应该给出具体信息 Mac 操作系统版本等 我想从中读取用户代理Services appShell hiddenDOMWindow a
  • 如何使用 PHP 检索页面源代码(在 javascript 运行之后)?

    在我的页面上 javascript在页面加载时添加了很多类 取决于页面 我怎样才能等到 javascript 添加这些类 然后使用 Javascript 或 PHP 从不同的文件获取 HTML 当页面加载完成后 使用 Ajax 将渲染的源代
  • 如何删除列表中其字符串包含另一个列表中的子字符串的元素

    我有一个像这样的字符串 var str DAVID CORPORATION 然后我在 str 中有一个我不想要的子字符串列表 var describers new List
  • Vbscript - 读取 ini 或文本文件的特定部分

    我想将一些地址存储在文本文件中 然后根据组成员身份读取文件的特定部分 我已经完成了所有小组成员资格的工作 所以我不需要任何帮助 但我不确定是否应该使用纯文本文件或 INI 文件 问题是 帖子地址分为两行或三行 我需要换行 我尝试使用纯文本文
  • 参数末尾的“&”运算符

    我是菜鸟 这是我的第一篇文章 关于 字符 我理解它作为引用 地址和逻辑运算符的一般用法 然而 当我试图让 boost 随机数生成器函数工作时 我注意到我以前从未见过的 字符的另一种用法 也没有关于它的明确文档 至少在网络上 请注意 下面的
  • 使用 BorderLayout 将 JPanel 浮动在 JPanel 上方

    我有一个JPanel called pnlMain布局设置为BorderLayout 面板里面有三个JPanel添加到PAGE START CENTER and PAGE END 现在 我的要求是 如果单击 设置 按钮 它将显示一个透明的J
  • 启动 SublimeREPL -python 时出现“没有这样的文件或目录”错误

    每次我在 sublimeREPL 包中启动 python 时 都会出现错误 已经有一个讨论此错误的分支 官方文档给出了以下解决方案 If the binary is not in your system path and you can t
  • Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义

    我是否缺少一些东西可以允许项目记录为带有参数的对象 但是当我尝试访问该参数时 它是未定义的 到目前为止我尝试过的 console log item gt title foo content bar 没关系 console log typeo