繁体   English   中英

如何通过查询参数在 mongoose 中创建增量范围聚合。 即从字段值创建增量范围

[英]How to create incremental range aggregation in mongoose from a query parameter. i.e. create an incremental range from a field value

所以数据集是这样的:数据结构截图

 { "YearWeekISO": "2020-W53", "FirstDose": 0, "FirstDoseRefused": "", "SecondDose": 0, "DoseAdditional1": 0, "DoseAdditional2": 0, "UnknownDose": 0, "NumberDosesReceived": 0, "NumberDosesExported": 0, "Region": "AT", "Population": "8901064", "ReportingCountry": "AT", "TargetGroup": "ALL", "Vaccine": "JANSS", "Denominator": 7388778 }, { "YearWeekISO": "2020-W53", "FirstDose": 0, "FirstDoseRefused": "", "SecondDose": 0, "DoseAdditional1": 0, "DoseAdditional2": 0, "UnknownDose": 8, "NumberDosesReceived": 0, "NumberDosesExported": 0, "Region": "AT", "Population": "8901064", "ReportingCountry": "AT", "TargetGroup": "ALL", "Vaccine": "UNK", "Denominator": 7388778 },

链接到数据集

查询参数将如下所示:

GET /vaccine-summary?c=AT&dateFrom=2020-W10&dateTo=2020-W53&range=5

在哪里

c,获取报告的国家代码

dateFrom,yyyy-Www,例如。 2020-W10(含)

dateTo, yyyy-Www, eg, 2020-W20 (不包括)

rangeSize,数字,例如,计算指标的时间段

应用聚合后,您应该有一个转换后的数据集,如下所示:

 { "summary": [{ "weekStart": "2020-W10", "weekEnd": "2020-W15", "NumberDosesReceived": 1000 }, { "weekStart": "2020-W15", "weekEnd": "2020-W20" "NumberDosesReceived": 2000 }, … till end of range(dateTo) ] }

}

请注意 weekStart 如何从 2020-W10 增加到 2020-W15,与 weekEnd 类似。

NumberDosesReceived 是该范围内 NumberDosesReceived 文件的总和

它应该工作

常量 YearWeekISO = { $toDate: "$YearWeekISO" };

 { $project: { fiveWeekperiod: { $subtract: [ { $week: YearWeekISO }, { $mod: [{ $week: YearWeekISO }, 5] }, ], }, date: YearWeekISO, NumberDosesReceived: 1, }, }, { $group: { _id: { year: { $year: "$date" }, fiveWeek: "$fiveWeekperiod", }, weekStart: { $min: "$date" }, weekEnd: { $max: "$date" }, NumberDosesReceived: { $sum: "$NumberDosesReceived" }, }, }, { $project: { _id: 0, weekStart: { $dateToString: { date: "$weekStart", format: "%GW%V", }, }, weekEnd: { $dateToString: { date: { $dateAdd: { startDate: "$weekEnd", unit: "week", amount: 1, }, }, format: "%GW%V", }, }, NumberDosesReceived: 1, }, }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM