为了账号安全,请及时绑定邮箱和手机立即绑定

同时计算多个集合中的文档数

同时计算多个集合中的文档数

慕妹3146593 2023-07-29 16:48:18
我想同时计算三个独立 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)  });});
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

由于所有查询都是独立的,因此您可以使用 并行运行它们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您可以通过使用with进一步使其更具可读性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);

    }

});

查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信