[英]Count documents in several collections simultaneously
我想同時計算三個單獨的 MongoDB collections 中的文件數量。 我現在擁有的東西有效但速度很慢。 誰能幫我優化一下?
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);
}
});
你可以在這里閱讀更多Promise.all() , async-await和async-await with Promise.all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.