node.js - 连续迭代 mongodb 游标(在移动到下一个文档之前等待回调)

使用 mongoskin,我可以做这样的查询,它会返回一个游标:

myCollection.find({}, function(err, resultCursor) {
      resultCursor.each(function(err, result) {

      }
}

但是,我想为每个文档调用一些异步函数,并在回调后才移动到光标上的下一项(类似于 async.js 模块中的 eachSeries 结构)。例如:

myCollection.find({}, function(err, resultCursor) {
      resultCursor.each(function(err, result) {

            externalAsyncFunction(result, function(err) {
               //externalAsyncFunction completed - now want to move to next doc
            });

      }
}  

我该怎么做?

谢谢

更新:

我不想使用 toArray(),因为这是一个大批量操作,结果可能一次无法放入内存。

最佳答案

使用 async/await 的更现代的方法:

const cursor = db.collection("foo").find({});
while(await cursor.hasNext()) {
  const doc = await cursor.next();
  // process doc here
}

注意事项:

  • 当async iterators 时,这可能简单。到达。
  • 您可能需要添加 try/catch 以进行错误检查。
  • 包含函数应该是 async 或者代码应该被包裹在 (async function() { ... })() 因为它使用 await .
  • 如果需要,可以在 while 循环的末尾添加 await new Promise(resolve => setTimeout(resolve, 1000));(暂停 1 秒)以表明它确实处理文档一个接一个。

https://stackoverflow.com/questions/18119387/

相关文章:

mongodb - 如何更新 Mongoose 中的多个文档?

node.js - Mongoose:CastError:在路径 "[object Object]"

mongodb - 有人用过 Aerospike 吗?它与 MongoDB 相比如何?

python - 如何使用 pymongo 更新值?

python - pymongo.errors.CursorNotFound : cursor id

mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档

mongodb - 截断集合

mongodb - 如何将 MongoDB 中的属性从文本类型转换为日期类型?

javascript - 如何在nodejs mongodb native 驱动程序中将字符串转换为

mongodb - 用于 mongodb ObjectId 创建时间