在mongodb中如何按天聚合数据并以日期格式存储聚合日期

时间:2021-05-24 05:49:04

标签: mongodb pymongo

我正在使用 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"}
            }}
        ])

0 个答案:

没有答案