You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码说明

  1. 日期格式转换:通过$dateFromString将原始带时间的字符串转为MongoDB日期对象,再用$dateToString提取纯日期部分,解决按天聚合的需求。
  2. 联合分组:$group阶段使用eui和date_only作为联合分组键,实现同时按设备(eui)和日期分组的效果。
  3. 统计计算:在分组内直接用$min、$max、$avg计算温度的极值和平均值,$round用于将平均值保留一位小数,和期望输出一致。
  4. 格式整理:$project阶段重新组织输出字段,去除自动生成的_id,让结构完全匹配你需要的格式。

执行上述代码后,输出结果将与你提供的示例完全一致。

内容的提问来源于stack exchange,提问作者Sala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:45:34