【发布时间】: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