我有一个mongo数据库,其中有许多记录格式为:
{
id: {
$_id
},
date: {
$date: YYYY-MM-DDThh:mm:ssZ
},
reading: X.XX
}
其中date是mongo中的时间戳,read是float (id只是数据点的唯一标识符)。
我希望能够计算读数为某个值的最长时间(假设为便于使用0.00)并返回此时间段的起点和终点。如果有多个相同长度的时间段,我希望它们全部返回。
最终,例如,我希望能够说
"阅读时间0.00
和1.25 hours
之间的
2000-01-01T00:00:00 - 2000-01-01T01:15:00
,
2000-06-01T02:00:00 - 2000-06-01T03:15:00
,
2000-11-11T20:00:00 - 2000-11-11T21:15:00
。"
对于我的mongo聚合查询,我正在考虑这样做:
2000-01-01 to
2001-01-01
) 0.00
的最长时间。这是我到目前为止的查询:
[
{
$match: {
date: { $gte: ISODate("2000-01-01T00:00:00.0Z"), $lt: ISODate("2001-01-01T00:00:00.0Z") }
}
},
{ "$sort": { "date": -1 } },
{
"$group" : {
"_id": null,
"Maximum": { "$max": { "max": "$reading", "date": "$date" } },
"Longest": { XXX: { start_dates: [], end_dates: [] } }
}
},
{
"$project": {
"_id": 0,
"max": "$Maximum",
"longest": "$Longest"
}
}
]
我不知道如何选择最长的跑步。你会怎么做?
(你会注意到我也对这段时间内的最大阅读时间以及最大阅读时间的日期感兴趣。目前我只记录最新的日期/时间,但希望如此记录最终值最大值的所有日期/时间。)