Javascript 节点超时/不返回值中的MongoDB聚合函数
我试图查询mongoDB集合,以便使用mongoshell返回每个供应商的发票总额,我可以使用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((
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);
}
});