res.send 在两个 foreach 完成执行后


const collect = [];
req.body.product.forEach(function(entry) {
    mongoClient.connect(databaseServerUrl, function(err, db) {
        let testCollection = db.collection('Tests');
        testCollection.find({Product: entry}).toArray((err, docs) => {
            let waiting = docs.length;
            docs.forEach(function (doc) {
                collect.push(doc);
                finish();
            });
            function finish() {
                waiting--;
                if (waiting === 0) {
                    res.send(collect);
                }
            }
        });
        db.close();
    });
});

这只是拿回第一盘。例如,如果我的 req.body.product 数组中有两个节点。我只拿回了第一盘。但我需要取回所有东西,而不仅仅是从一个集合中取回。

与其执行两个查询并将结果合并到一个数组中,我建议执行一个查询来获取所有结果,如下所示:

mongoClient.connect(databaseServerUrl, function(err, db) {
    const query = { $or: req.body.product.map(Product => ({ Product })) };
    db.collection('Tests').find(query).toArray((err, docs) => {
        // ...handle `err` here...
        res.send(docs);
        db.close();
    });
});

请注意,我还没有对此进行测试,因为我面前没有MongoDB数据库。

你的mongoClient.connect()是异步的,但你的循环只是执行而不等待回调。

尝试异步每个循环:在此处输入链接说明

这应该可以解决您的问题

最新更新