Estoy tratando de obtener un conteo de productos usando llamadas api pero en cartero sigue cargando
router.get(`/get/count`, async (req, res) => { const productCount = await Product.countDocuments((count)=>count) if (!productCount) { res.status(500).json({ success: false }); } res.send({ productCount: productCount }); }); (node:28030) UnhandledPromiseRejectionWarning: MongooseError: Query was already executed: Product.countDocuments({})sin asíncrono y espera tampoco funciona
Trato de detectar el error y obtuve este error en cartero
{ "success": false, "error": "Query was already executed: Product.countDocuments({})" }código para capturar el error:
router.get(`/get/count`, (req, res) => { Product.countDocuments((count)=>count).then((pcount)=>{ if(pcount){ return res.status(200).json({success:true}) }else{ return res.status(404).json({success:false}) } }).catch((err)=>{ return res.status(400).json({success:false, error:err.message}) }) });Creo que en las operaciones de Mongoose desea await o proporcionar una devolución de llamada, pero no ambas. Intentar hacer ambas cosas hace que se ejecute internamente la consulta dos veces.
Prueba solo:
const productCount = await Product.countDocuments();Si quieres contar todos los productos de tu colección de productos, prueba esto
db.product.countDocuments({})router.get(`/get/count`, async(req, res) => { let productCount = await Product.countDocuments(); if(!productCount){ res.send(500).json({success:false}) } res.send({productCount: productCount}) });