Javascript 节点超时/不返回值中的MongoDB聚合函数

Javascript 节点超时/不返回值中的MongoDB聚合函数,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我试图查询mongoDB集合,以便使用mongoshell返回每个供应商的发票总额,我可以使用 db.invoice.aggregate ([ {$group: {_id: "$supplier_name", total: {$sum: "$invoice_amount"} } } ]) 在我的应用程序的后端,我设置了一个routes文件夹,在这里我可以成功地查询我的数据库,比如 invoiceRoute.route('/supplier-count').get((

我试图查询mongoDB集合,以便使用mongoshell返回每个供应商的发票总额,我可以使用

db.invoice.aggregate ([
    {$group: {_id: "$supplier_name",
      total: {$sum: "$invoice_amount"} } }
    ])
在我的应用程序的后端,我设置了一个routes文件夹,在这里我可以成功地查询我的数据库,比如

invoiceRoute.route('/supplier-count').get((req, res) => {
  Invoice.count({supplier_name: 'xyx'}, (error, data) => {
  if (error) {
    return next(error)
  } else {
    res.json(data);
  }
  })})
但是,当我尝试运行此代码时,我用于聚合函数的代码不会返回任何内容

invoiceRoute.route('/generate-report').get((res) => {
    Invoice.aggregate ([
        {$group: 
            {_id: "$supplier_name", 
             total: {$sum: "$invoice_amount"}} }
            ]), (error, data) => {
        if (error) {
            return next(error)  
            } else {
            res.json(data);
      }}});
我尝试过使用其他答案中建议的.toArray函数,但它的响应是

Invoice.aggregate(...).toArray is not a function
我已经使用postman检查了请求,它在收到响应之前超时,但是其他请求确实会返回响应

非常感谢您的任何建议

您在路由函数中缺少req和next:invoiceRoute.route'/generate report.getres=>{


.toArray是mongodb函数的一个节点本机驱动程序,似乎您正在使用Mongoose。不要使用它。尝试了这个方法,但它仍然不会返回任何内容。您可以在if块启动之前记录聚合查询返回的值吗?例如,console.logerror,data,以及在聚合查询启动之前,确保是否调用了route get/generate report。将它与首先,我丢失了req,接下来是route函数,但也发现我在数组后面放错了一个括号,这会停止调用res。
invoiceRoute.route('/generate-report').get((req, res, next) => {
    Invoice.aggregate([{
        $group: {
            _id: "$supplier_name",
            total: {
                $sum: "$invoice_amount"
            }
        }
    }]), (error, data) => {
        if (error) {
            return next(error)
        }

        res.json(data);
    }
});