【问题标题】:Mongoose forEach is not a function猫鼬 forEach 不是函数
【发布时间】:2022-01-24 00:39:08
【问题描述】:

我有一个包含 50,000 个用户的数据库,我需要遍历每个用户并使用每个用户的一些动态值更新它们。

我试过了

users.find({}).forEach((user) => { console.log('Some code.') })

但它说 forEach 不是一个函数 - 从研究看来这是一个 mongodb 函数而不是 mongoose 函数。

我尝试只使用find({}),但结果当然是基于光标的,而且它实际上也不会为我提供任何 console.log 内容。

我也尝试过使用.stream(),但这也没有返回函数,我也尝试过使用.batchSize(100),但在测试时也没有在控制台日志中返回任何内容。

我研究了 updateMany,但这仅适用于更新字段中的相同静态值。

我对如何以高效的方式继续前进有点迷茫。有什么想法吗?

谢谢,

【问题讨论】:

  • 试试users.find({}).toArray().forEach
  • @WernfriedDomscheit 据我所知,它将尝试一次性找到所有 50,000 多个文档并转换为数组?那不会是高性能的。我需要一种遍历/批处理光标的方法
  • 你试过了吗?现在到 2022 年,50k 元素的数组应该不再是问题了。
  • 你的功能是什么?我想这可以通过聚合管道来完成。
  • @WernfriedDomscheit javascript 仍然是单线程的,所以对于每个用户来说,当我执行计算时,它会杀死我的 cpu 并减慢我的应用程序,afaik 吗?顺便说一句,这将是一个每小时的 cron 作业

标签: javascript node.js mongodb mongoose


【解决方案1】:

Model.find() 函数返回一个承诺,而不是一个数组。

您将需要使用await 或回调来实际执行查找并在迭代之前检索结果数组。

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 2018-01-15
    • 2019-01-18
    • 2021-07-14
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2023-01-28
    • 2019-10-05
    相关资源
    最近更新 更多