Агрегат Mongoose генерирует ошибку при нулевом совпадении - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь агрегировать поле в mongodb на основе некоторых условий. Это прекрасно работает, когда есть хотя бы одно совпадение, но в противном случае выдает ошибку. Я хочу, чтобы агрегированное значение равнялось 0, когда совпадений нет. Что нужно изменить в приведенном ниже коде?

Примечание: fromDate и toDate переданы через API Payload.

"errorMesssage": "Невозможно прочитать свойство 'количество' из неопределенного"

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"
}

1 Ответ

0 голосов
/ 28 октября 2019

Это не совокупность, вызывающая исключение, эта строка вызывает ошибку, потому что вы не проверяли, является ли rev нулем или нет.

   return rev[0].amount;

Таким образом, для обработки нуля вы можете:

if (rev && rev[0]) {
  return rev[0].amount;
} else {
  return 0;
}
...