首页 > 解决方案 > 一种逐一检查集合中所有数据的有效方法(nodejs、mongoose)

问题描述

要解决的问题 我想一个一个地读取一个mongodb集合中的所有文档并保存API(使用npm request模块)导致另一个集合($out)。

我的努力 我只是尝试在 async/await 中一一取出值并一一发送请求

let data = await models.myCollection.find();

并通过如下代码的迭代语句一一发送数据数组请求。

for( let i = 0 ; i < data.length ; i++ ) {
  await request(...);
}

集合中的文档数量约为 1500。

期望 当我按上述方法进行时,没有错误。但我想知道什么是有效的逻辑。(我认为如果我有样品会更好。)

谢谢你。

标签: node.jsmongodbmongoose

解决方案


虽然我之前没有尝试过这种方法,但请验证我的方法并对其提出质疑。我的建议是使用streams. 我以前用它来转换大型 JSON 文件中的数据。

您可以在这里参考一些文档:https ://mongodb.github.io/node-mongodb-native/2.0/tutorials/streams/

一个很好的 NPM 模块来处理对我有用的流是RxJS. 它具有易于掌握的可观察和订阅模式。参考:https ://github.com/Reactive-Extensions/RxJS

对于您的示例,如果它要扩展到数百万或数千条记录,您可以只处理每个文档并调用 API。更好的做法是批量处理请求,您可以在其中获取 100 或 1000 的倍数并调用 API 一次以更新所有记录。


推荐阅读