Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同时对多个集合中的文档进行计数_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 同时对多个集合中的文档进行计数

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({})

我想同时计算三个独立MongoDB集合中的文档数量。我现在拥有的东西可以工作,但速度很慢。谁能帮我优化一下吗

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);
    }
});
你可以在这里读更多 ,及