Javascript 同时对多个集合中的文档进行计数
我想同时计算三个独立MongoDB集合中的文档数量。我现在拥有的东西可以工作,但速度很慢。谁能帮我优化一下吗Javascript 同时对多个集合中的文档进行计数,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我想同时计算三个独立MongoDB集合中的文档数量。我现在拥有的东西可以工作,但速度很慢。谁能帮我优化一下吗 app.post('/fetch-numbers',(req, res) => { let numbers = {}; Clinic.countDocuments({}) .then(clinicCount => { numbers.clinicCount = clinicCount; Dentist.countDocuments({})
app.post('/fetch-numbers',(req, res) => {
let numbers = {};
Clinic.countDocuments({})
.then(clinicCount => {
numbers.clinicCount = clinicCount;
Dentist.countDocuments({})
.then(dentistCount => {
numbers.dentistCount = dentistCount;
Booking.countDocuments({})
.then(bookingCount => {
numbers.bookingCount = bookingCount;
res.json(numbers)
})
})
})
.catch(err => {
res.json(err)
});
});
由于所有查询都是独立的,因此可以使用
promise.all()
并行运行它们,代码如下所示:
app.post('/fetch-numbers', async (req, res) => {
Promise.all([
Clinic.countDocuments({}),
Dentist.countDocuments({}),
Booking.countDocuments({})
])
.then((docCounts) => {
const numbers = docCounts.reduce((a, b) => a + b, 0)
res.json(numbers);
})
.catch(err => res.json(err));
const numbers = docCounts.reduce((a, b) => a + b, 0)
res.json(numbers);
});
通过将async await
与Promise.all()
一起使用,可以进一步提高其可读性,例如:
app.post('/fetch-numbers', async (req, res) => {
try {
const docCounts = await Promise.all([
Clinic.countDocuments({}),
Dentist.countDocuments({}),
Booking.countDocuments({})
]);
const numbers = docCounts.reduce((a, b) => a + b, 0)
res.json(numbers);
} catch(err) {
res.json(err);
}
});
你可以在这里读更多
,及