Node.js MongoDB查询的异步映射

时间:2018-02-21 08:57:09

标签: node.js mongodb loops asynchronous

我遇到async Node.js模块的问题。在我的Node.js应用程序中,我正在尝试获取MongoDB请求返回的JSON对象数组:

var fruits = ["Peach", "Banana", "Strawberry"];
var finalTab = [];
fruits.forEach(function(fruit) {
    db.collection('mycollection').distinct("column1", {"column2":{$regex :fruit}}, (function(err, result) {                 
        finalTab[fruit] = result;
        console.log(result); // -> display the desired content
        db.close();
        if (err) throw err;
    }));
});
console.log(finalTab); // -> []

目前,我正处于这一点。

我正在尝试实施async.map来迭代Fruits集合。 https://caolan.github.io/async/docs.html#map

有人可以帮忙吗? :)

感谢您提前寻求帮助。

编辑: 由于我需要我的db.collection函数返回的所有结果,我正在尝试将这些异步命令添加到队列中,执行它并获得回调函数。

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

async.map(fruits , function (fruit, callback) {
    db.collection('mycollection').distinct("column1", {"column2":{$regex :fruit}}, (function(err, result) {        
        //here you are assigning value as array property         
        //finalTab[fruit] = result;
        // but you need to push the value in array
        finalTab.push(result);
        console.log(result); // -> display the desired content
        db.close();
        if (err) throw err;
        //callback once you have result
        callback();
    }));
}.bind(this), function () {
    console.log(finalTab); // finally call
}, function (err, result) {
    return Promise.reject(err);
});