我创建了一个循环来执行多个查询,如以下代码所示:
router.get('/getAverageClicks', async (req, res) => {
if(req.headers.token == process.env.API_TOKEN){
let clicks = [];
database.collection('locations').countDocuments().then(loccount => {
for (var i = 0; i <= 10; i++) {
var past = new Date();
past.setDate(past.getDate() - i);
var tpast = new Date();
tpast.setDate(tpast.getDate() -1 -i)
console.log(tpast);
var query = { $and : [ {date: {$lte: past}},{date: {$gte: tpast}}]};
collection.countDocuments(query).then(count => {
console.log(count)
clicks.push(count/loccount);
if (clicks.length == 10){
res.end(JSON.stringify(clicks.reverse()));
res.status(200);
}
});
}
})
}else{
res.end("Unauthorized")
res.status(401)
}
});
现在的问题是mongodb异步返回数据,这意味着我有时会在不同的行中获得数据。 我的问题是如何在同一行中执行10个不同日期的查询,每次都得到相同的数组。 或者我如何改进循环,直到每个操作完成
您可以使用支持async/await的for of
循环,在发送响应之前等待每个查询。 它可能如下所示:
router.get('/getAverageClicks', async (req, res) => {
if (req.headers.token == process.env.API_TOKEN) {
const loccount = await database.collection('locations').countDocuments();
let clicks = [];
for (const i of [...new Array(11)].keys()) {
var past = new Date();
past.setDate(past.getDate() - i);
var tpast = new Date();
tpast.setDate(tpast.getDate() - 1 - i)
console.log(tpast);
var query = { $and: [{ date: { $lte: past } }, { date: { $gte: tpast } }] };
const count = await collection.countDocuments(query);
console.log(count)
clicks.push(count / loccount);
}
res.end(JSON.stringify(clicks.reverse()));
res.status(200);
} else {
res.end("Unauthorized")
res.status(401)
}
});