使用多个mongo查询填充数组

时间:2018-02-20 16:12:52

标签: node.js mongodb asynchronous mongoose callback

我遇到了回调问题。

在我的nodejs app中,我试图获取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); // -> []

感谢您提前寻求帮助。

编辑: 因为我需要我的db.collection ...函数返回的所有结果...我试图将这些异步命令添加到队列中,执行它并获得回调函数。 我认为async nodejs模块可以提供帮助。

有人可以告诉我如何在ForEach()中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

finalTab[fruit] = result;无效,因为fruit没有索引。您需要在forEach()中使用索引,如下所示 -

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