MongoDB聚合:按eui与日期分组统计温度极值及均值
按EUI和日期分组聚合温度数据的PyMongo解决方案
完整聚合代码
from pymongo import MongoClient # 连接MongoDB(根据实际配置调整连接字符串) client = MongoClient('mongodb://localhost:27017/') db = client['your_db_name'] collection = db['your_collection_name'] # 定义聚合管道 aggregation_pipeline = [ # 第一步:提取仅包含年月日的日期字符串 { "$addFields": { "date_only": { "$dateToString": { "format": "%Y/%m/%d", "date": { "$dateFromString": { "dateString": "$date", "format": "%Y/%m/%d, %I:%M %p" } } } } } }, # 第二步:按eui和日期分组,计算温度统计值 { "$group": { "_id": { "eui": "$eui", "date": "$date_only" }, "min_t": {"$min": "$temperature"}, "max_t": {"$max": "$temperature"}, "avg_t": {"$avg": "$temperature"} } }, # 第三步:整理输出格式,保留一位小数并去除_id { "$project": { "_id": 0, "eui": "$_id.eui", "date": "$_id.date", "min_t": 1, "max_t": 1, "avg_t": {"$round": ["$avg_t", 1]} } }, # 可选:按eui和日期排序,匹配示例输出顺序 { "$sort": { "eui": 1, "date": -1 } } ] # 执行聚合并转换为列表 result = list(collection.aggregate(aggregation_pipeline)) print(result)
代码说明
- 日期格式转换:通过
$dateFromString将原始带时间的字符串转为MongoDB日期对象,再用$dateToString提取纯日期部分,解决按天聚合的需求。 - 联合分组:
$group阶段使用eui和date_only作为联合分组键,实现同时按设备(eui)和日期分组的效果。 - 统计计算:在分组内直接用
$min、$max、$avg计算温度的极值和平均值,$round用于将平均值保留一位小数,和期望输出一致。 - 格式整理:
$project阶段重新组织输出字段,去除自动生成的_id,让结构完全匹配你需要的格式。
执行上述代码后,输出结果将与你提供的示例完全一致。
内容的提问来源于stack exchange,提问作者Sala
相关产品推荐
相关产品推荐

