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()
是异步的,但你的循环只是执行而不等待回调。
尝试异步每个循环:在此处输入链接说明
这应该可以解决您的问题