我正在使用聚合与组来计算小时、天或周的最大值。 一切都很好,数小时,数天。但是周组有一些问题。 具体来说,我有一天的记录: 2020-06-03 并且那一天属于 2020 年的第 23 周(从 2020-06-01 到 2020-06-07 的第 23 周)但是 mongo 是返回 2020-06 的值-03 至 2020 年第 22 周
示例:(您可以在这里看到:https://mongoplayground.net/p/T9LeA7jpNLa)
这是我的模拟录音:
[
{
"dateTime": ISODate("2020-06-03"),"value": 25
},{
"dateTime": ISODate("2020-05-25"),"value": 27
}
]
这是我的查询:
db.collection.aggregate([
{
"$match": {
"dateTime": {
"$gte": ISODate("2020-05-01"),"$lte": ISODate("2020-07-01")
}
}
},{
"$group": {
"_id": {
"week": {
"$week": {
"date": "$dateTime","timezone": "+00:00"
}
},"year": {
"$year": {
"date": "$dateTime","timezone": "+00:00"
}
}
},"maxValue": {
"$max": "$value"
}
}
},{
"$project": {
"_id": {
"start": {
"$dateToString": {
"date": {
"$dateFromParts": {
"isoWeekYear": "$_id.year","isoWeek": "$_id.week"
}
},"format": "%Y-%m-%d"
}
},"end": {
"$dateToString": {
"date": {
"$add": [
{
"$dateFromParts": {
"isoWeekYear": "$_id.year","isoWeek": "$_id.week"
}
},518400000
]
},"format": "%Y-%m-%d"
}
}
},"maxValue": "$maxValue"
}
}
])
结果:
[
{
"_id": {
"end": "2020-05-24","start": "2020-05-18"
},"maxValue": 27
},{
"_id": {
"end": "2020-05-31","start": "2020-05-25"
},"maxValue": 25
}
]
我的期望:
[
{
"_id": {
"end": "2020-05-31",{
"_id": {
"end": "2020-06-01","start": "2020-06-07"
},"maxValue": 25
}
]