一尘不染

依次遍历mongodb游标(在等待回调之前,移至下一个文档)

node.js

使用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()因为这是一个大的批处理操作,并且结果可能无法一次性存储在内存中。


阅读 296

收藏
2020-07-07

共1个答案

一尘不染

如果您不想使用toArray将所有结果加载到内存中,则可以使用游标进行迭代,如下所示。

myCollection.find({}, function(err, resultCursor) {
  function processItem(err, item) {
    if(item === null) {
      return; // All done!
    }

    externalAsyncFunction(item, function(err) {
      resultCursor.nextObject(processItem);
    });

  }

  resultCursor.nextObject(processItem);
}
2020-07-07