我正在使用 pymongo 按 device_id
和 day wise 聚合集合中的数据,并将聚合数据存储在新集合中。我的输入集合每天都有一个 device_id
的数据点。我需要将其聚合为具有最小值、最大值和平均值的每日聚合。
输入集合看起来像
{"_id":{"$oid":"60aa88dc53b7117d776e1fa9"},"device_id":"DT001","value":23,"timestamp":{"$date":"2020-12-01T00:30:00.000Z"}}
{"_id":{"$oid":"60aa88dc53b7117d776e1faa"},"device_id":"DT001","value":26,"timestamp":{"$date":"2020-12-01T01:30:00.000Z"}}
{"_id":{"$oid":"60aa88dc53b7117d776e1fab"},"device_id":"DT001","value":26,"timestamp":{"$date":"2020-12-01T02:30:00.000Z"}}
{"_id":{"$oid":"70aa88dc53b7117d776e1fa9"},"device_id":"DT002","value":33,"timestamp":{"$date":"2020-12-01T00:30:00.000Z"}}
{"_id":{"$oid":"70aa88dc53b7117d776e1faa"},"device_id":"DT002","value":36,"timestamp":{"$date":"2020-12-01T01:30:00.000Z"}}
{"_id":{"$oid":"70aa88dc53b7117d776e1fab"},"device_id":"DT002","value":36,"timestamp":{"$date":"2020-12-01T02:30:00.000Z"}}
每个设备每天的输出集合应如下所示
{"device_id":"DT001","avgvalue":"XX", "minValue": "YY", "maxValue": "ZZ", "timestamp":{"$date":"2020-12-01T00:00:00.000Z"}}
目前,我只能进行如下聚合,但输出集合格式是我所期望的。
pipe = ([{
"$group" :
{
"_id": {
"device_id": "$device_id",
"month": { "$month": "$timestamp" },
"day": { "$dayOfMonth": "$timestamp" },
"year": { "$year": "$timestamp" }
},
"averageValue": {"$avg": "$value"},
"minValue": {"$min": "$value"},
"maxValue": {"$max": "$value"}
}}
])