我正在设置一个仪表板,我们希望在其中显示每个月的一些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
及其内部的条件无法正常工作。有人可以看到我在这里想念的吗?
我的预期结果是获取所有在当月最后一天之前开始的订阅,并且结束不存在或大于当月最后一天的订阅。
谢谢!