我正在尝试根据某些条件在mongodb中聚合一个字段。当至少有一个匹配项时,此方法工作正常,但否则会引发错误。当没有匹配项时,我希望将汇总值设为0。下面的代码需要修改什么?
注意:fromDate
和toDate
通过API有效负载传递。
“ errorMesssage”:“无法读取未定义的属性'amount'”
DTO:
export class MetricsDTO {
fromDate: Date;
toDate: Date;
}
服务
async getRevenue(metricClause: Partial<MetricsDTO>) {
if (Object.keys(metricClause).length == 0) {
var rev = await this.bookingsModel.aggregate([
{ $group: { _id: null, amount: { $sum: '$GrossAmount' } } }
])
} else {
var rev = await this.bookingsModel.aggregate([
{ $match: { TxnDate: { $gte: metricClause.fromDate, $lte: metricClause.toDate } } },
{ $group: { _id: null, amount: { $sum: '$GrossAmount' } } }
])
}
return rev[0].amount;
}
有效载荷
{
"fromDate": "2019-10-24",
"toDate": "2019-10-25"
}
答案 0 :(得分:0)
不是引起异常的聚集,这行会导致错误,因为您没有检查rev是否为空。
return rev[0].amount;
因此,要处理null,您可以:
if (rev && rev[0]) {
return rev[0].amount;
} else {
return 0;
}