MongoDB查询location:1所有日期22点Emision_CO2平均值问题排查
问题排查与修复方案
原查询存在的错误
- 字段名拼写错误:
$project阶段将medidas错写为me-didas,导致后续所有阶段无法读取测量数据 - 多余的日期类型转换:文档中
timestamp本身已经是ISODate类型,不需要调用$dateFromString做转换,反而可能触发类型错误 - 小时值匹配错误:
$hour运算符返回24小时制数值,你要统计的22点(10pm)对应值为22,原语句写的10对应的是上午10点,完全不符合需求 - 错误截取数组内容:原语句用
$slice: ["$medidas", -1]取数组最后一个元素,但Emision_CO2不一定在数组末尾,会直接过滤掉有效数据 - 取值字段名错误:测量值字段是
valor,原语句$avg阶段写的valores拼写错误,且未处理数组结构,无法正确读取数值
正确的聚合查询
db.datos_sensores2.aggregate([ // 第一步先过滤点位,缩小数据范围,提升查询性能 { $match: { location_id: 1 } }, // 拆分medidas数组,把每个测量项拆成独立文档 { $unwind: "$medidas" }, // 过滤出仅包含CO2排放的测量项 { $match: { "medidas.tipo_medida": "Emision_CO2" } }, // 提取小时字段,过滤22点的数据 { $addFields: { Hora: { $hour: "$timestamp" } } }, { $match: { Hora: 22 } }, // 分组计算平均值 { $group: { _id: null, Avg_Emision_CO2: { $avg: "$medidas.valor" } } } ])
内容的提问来源于stack exchange,提问作者Gaby
相关产品推荐
相关产品推荐

