【发布时间】:2020-09-16 10:56:38
【问题描述】:
在这个问题中,我想获取以下时间范围的用户订阅
- 今天
- 本周
- 本月
- 今年
对于这个时间范围,我想显示所有可能日期的$group。
[
{ Dates: '2020-05-21', Count: 3, AverageIncome: 30 },
{ Dates: '2020-05-22', Count: 10, AverageIncome: 30 },
{ Dates: '2020-05-24', Count: 1, AverageIncome: 37 },
{ Dates: '2020-05-25', Count: 1, AverageIncome: 30 },
{ Dates: '2020-05-26', Count: 2, AverageIncome: 65 }
]
我想添加缺失的日期以及将累加器数据设置为 0。例如,它应该是
[
{ Dates: '2020-05-21', Count: 3, AverageIncome: 30 },
{ Dates: '2020-05-22', Count: 10, AverageIncome: 30 },
{ Dates: '2020-05-23', Count: 0, AverageIncome: 0 },
{ Dates: '2020-05-24', Count: 1, AverageIncome: 37 },
{ Dates: '2020-05-25', Count: 1, AverageIncome: 30 },
{ Dates: '2020-05-26', Count: 2, AverageIncome: 65 },
{ Dates: '2020-05-27', Count: 0, AverageIncome: 0 },
{ Dates: '2020-05-28', Count: 2, AverageIncome: 0 },
]
PS:此时UTC时间为5月28日晚上11点45分
我正在使用的聚合管道阶段
const $agg = await Subscription.aggregate([
{
$match: {
createdOn: {
$gte: moment(req.query.from).toDate(),
$lte: moment(req.query.to).toDate()
},
isCancelled: false
}
},
{
$group: {
_id: {
$dateToString: {
format: "%Y-%m-%d",
date: "$createdOn"
}
},
count: { $sum: 1 },
avgAmount: { $avg: "$amountPaid" }
}
},
{
$project: {
_id: false,
sortKey: {
$dateFromString: {
dateString: "$_id"
}
},
Dates: "$_id",
Count: "$count",
AverageIncome: "$avgAmount"
}
},
{
$sort: {
sortKey: 1
}
},
{
$project: {
sortKey: false
}
}
]);
【问题讨论】:
标签: node.js mongoose aggregation-framework