簡體   English   中英

同時統計幾個collections中的文檔

[英]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-awaitPromise.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-awaitasync-await with Promise.all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM