【问题标题】:NodeJs MongoDb Result without getters and setters没有getter和setter的NodeJs MongoDb结果
【发布时间】:2016-11-20 13:35:21
【问题描述】:

我正在开发一个利用 MongoDB 存储大量数据的 NodeJs 应用程序。使用“.find”或“.findOne”查询函数检索数据。

const collection = db.collection('recordings');

collection.find({}, {fields: ['header']}).toArray()
    .then(documents => {
        console.log(documents);
        resolve(documents);
    })
    .catch(error => reject(error));

应用程序是使用 Electron Js 构建的,因此我可以通过 chrome 开发人员工具检查数据:

拥有这些 getter 和 setter 会使应用程序变得非常缓慢。由于数据也在 D3 图表中可视化,所以我想出了这个相当奇怪的解决方案来删除所有函数:

JSON.parse(JSON.stringify(documents))

如果没有这个额外的步骤,图表就会开始卡顿。

有没有更好的方法来检索原始结果,而无需循环遍历所有文档以删除不必要的 getter 和 setter 函数?

谢谢。

【问题讨论】:

  • mongodb不太熟悉,但我只是试图复制你的问题。我没有得到这些getset 方法,只是一个平面对象数组。您使用的是什么版本的节点 mongodb 客户端?我试过 2.2.11...

标签: javascript node.js mongodb d3.js


【解决方案1】:

问题肯定不在 mongo 中。我也对这条线感到困惑{fields: ['header']}

如果你只想要标题字段,你需要像这样查询

collection.find({}, {'header': 1, _id: 0}).toArray().

https://docs.mongodb.com/v3.0/tutorial/project-fields-from-query-results/

希望这会有所帮助。

【讨论】:

  • 感谢您的回答。我使用的投影风格只是一种不同的语法。我已经根据官方文档进行了更改。奇怪的“getter”和“setter”问题仍然存在。也许这只是因为我在 Electron 渲染器进程中使用了 Mongo DB。
  • 可能是。因为我从未在 mongo 中看到过这种问题。顺便说一句,您使用什么模块来连接和查询 mongodb?
  • 它只是普通的mongodb节点模块:“mongodb”:“^2.2.11”
  • 嗯..那么肯定是电子。它以某种方式为数组中的所有数据添加 getter 和 setter。您需要查看如何禁用此行为。
【解决方案2】:

在遵循这篇文章的建议后,我得到了解决方案: https://stackoverflow.com/a/38490959/1292336

仅当您将 Electron 渲染器进程直接连接到 mongo 数据库时才会出现此问题。 您应该使用主进程并使用 ipc 传输每个查询的结果。

感谢 Mykola Borysyuk 和 Marc 重建问题 :)

【讨论】:

  • Np.Glat 帮助了你。
  • 这还是很奇怪。我的测试是在“渲染”过程中完成的。我只是 <script> 直接在我的 index.html 中。很高兴你把它整理好了。
  • 您是直接从渲染器进程还是通过 require('electron').remote('mongodb') 需要 mongodb 包?问题是我需要使用第二个渲染器进程,因此在聚合数据时另一个窗口和主进程仍然可以运行。
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2014-11-12
相关资源
最近更新 更多