Я настраиваю панель управления, где мы хотим показывать некоторые KPI для каждого месяца.У меня есть коллекция с бизнесом, у каждого бизнеса может быть подписка, которая может содержать несколько подписок (Массив), и цель состоит в том, чтобы получить общее количество подписок за каждый месяц.
Вот мой запрос на получениевсе подписки, которые были созданы до конца current month
, чтобы получить представление о росте от месяца к месяцу.
const queryForAmountOfSub = [
{ $project: { 'subscription.subscriptions': 1 } },
{ $unwind: '$subscription.subscriptions' },
{
$project: {
'subscription.subscriptions': 1,
isActive: {
$cond: [
{
$and: [
{ $lte: ['$subscription.subscriptions.startedAt', lastDayOfMonth.toDate()] },
{
$or: [
{ $ne: ['$subscription.subscriptions.endedAt', null] },
{ $gt: ['$subscription.subscriptions.endedAt', lastDayOfMonth.toDate()] },
],
},
],
},
true,
false,
],
},
},
},
{ $match: { isActive: true } },
{ $count: 'total' },
];
Вот пример того, как хранятся данные каждой подписки.
"subscriptions" : [
{
"handle" : "sub-xxx",
"plan" : "plus-monthly",
"status" : NumberInt(1),
"startedAt" : ISODate("2019-06-07T12:42:29.927+0000"),
"freeMonths" : NumberInt(0),
"paidAt" : ISODate("2019-06-07T12:42:29.927+0000"),
"endedAt" : ISODate("2019-08-07T12:42:29.927+0000"),
}
]
StartedAt
- это дата начала подписки, paidAt
- это startedAt
+ freeMonths
, если таковая имеется.EndedAt
- это дата, когда они завершили подписку, и только там, если подписка была закончена.
Проблема заключается во втором $project
и состоянии внутри него, которое на самом деле не работает правильно.Кто-нибудь может увидеть, что мне здесь не хватает?
Мой ожидаемый результат - получить все подписки, которые были начаты до последнего дня текущего месяца, и где окончание либо не существует, либо превышает последний день текущего месяца.
Спасибо!