node.js - NodeJS Batch Mongo 操作,等待回调

标签 node.js mongodb

我正在尝试对 mongo 数据库执行批处理操作。这个想法是遍历每个用户,然后找到正在学习同一类(class)或就读同一所大学的其他用户,并存储有关这些匹配项的信息。

一切都包含在这样的循环中:

User.find({}, function(err, doc){
    doc.forEach(function(candidate){
        //other find operations in here
        ...
    }
}

其中“用户”是在网站上注册的用户的集合。我遇到的问题是 forEach 循环正在为每个用户分派(dispatch)所有回调,而我想等待 forEach 循环中的所有回调完成,然后再转到下一个文档。

我试过使用异步,但我似乎无法弄清楚这一点。

如何一次处理每个用户?

最佳答案

你可以为此使用async,例如async.eachSeries:

async.eachSeries(doc, function (candidate, cb) {
    //other find operations in here
    ...
    // and you call cb() once they're done (important!)
    // or call cb('some error') if it failed 
}, function (err) {
    if (err) {
        // this means that some cb() above was called with error
    } else {
        // here all candidates are processed successfully
    }
});

参见:https://caolan.github.io/async/docs.html#eachSeries

关于node.js - NodeJS Batch Mongo 操作,等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42025562/

相关文章:

node.js - 在 Angular4 中获取当前日期

node.js - 如何取消 'pre' 钩子(Hook)中的 Mongoose 查询

node.js - 如何提取充满转义字符的 JSON 对象的参数 - '\'

MongoDB db.collection.count() 与 db.collection.find().length()

node.js - NodeJS 服务器上的 Mongoose 查询返回 NULL

node.js - 使用函数对 Firebase 数据库中 Node 的子 Node 进行排序

javascript - fs.stats 不提供文件所需的状态

Azure Cosmos DB 中托管的 MongoDB : Sharding vs partitioning

java - 在 mongodb 集合中找到一些值?

java - 在 mongodb 文档中查找字段