繁体   English   中英

如何在mongo中获取值总和大于420的天数

[英]how to obtain the days where the sum of the values is greater than 420 in mongo

我正在尝试按天对“emsion_co2”值求和。 为了知道该值在哪几天高于 420,但我的查询不起作用。

这是数据库

 db.test_sensores.insert([{"timestamp":"2020-07-01T00:00:00Z","dia":01,"sensor_id":1,"location_id":1,"medidas":[{"tipo_medida":"Temperatura","valor":16.61,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.74,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:00:00Z","dia":01,"sensor_id":2,"location_id":1,"medidas":[{"tipo_medida":"Emision_CO2","valor":1.572,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00188,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T00:15:00Z","dia":01,"sensor_id":1,"location_id":1,"medidas":[{"tipo_medida":"Temperatura","valor":15.75,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.08,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:15:00Z","dia":01,"sensor_id":2,"location_id":1,"medidas":[{"tipo_medida":"Emision_CO2","valor":1.626,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00146,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:30:00Z","dia":10,"sensor_id":1,"location_id":1,"medidas":[{"tipo_medida":"Temperatura","valor":14.08,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":90.05,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:30:00Z","dia":10,"sensor_id":2,"location_id":1,"medidas":[{"tipo_medida":"Emision_CO2","valor":1.614,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00173,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T00:45:00Z","dia":01,"sensor_id":1,"location_id":1,"medidas":[{"tipo_medida":"Temperatura","valor":10.62,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":92.27,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:45:00Z","dia":01,"sensor_id":2,"location_id":1,"medidas":[{"tipo_medida":"Emision_CO2","valor":1.59,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00196,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T00:00:00Z","dia":01,"sensor_id":1,"location_id":2,"medidas":[{"tipo_medida":"Temperatura","valor":22.08,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":34.92,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:00:00Z","dia":01,"sensor_id":2,"location_id":2,"medidas":[{"tipo_medida":"Emision_CO2","valor":2.055,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00269,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T00:15:00Z","dia":01,"sensor_id":1,"location_id":2,"medidas":[{"tipo_medida":"Temperatura","valor":21.12,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":37.7,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:15:00Z","dia":01,"sensor_id":2,"location_id":2,"medidas":[{"tipo_medida":"Emision_CO2","valor":2.102,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00272,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:30:00Z","dia":10,"sensor_id":1,"location_id":2,"medidas":[{"tipo_medida":"Temperatura","valor":24.26,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":52.52,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:30:00Z","dia":10,"sensor_id":2,"location_id":2,"medidas":[{"tipo_medida":"Emision_CO2","valor":2.023,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00255,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T00:45:00Z","dia":01,"sensor_id":1,"location_id":2,"medidas":[{"tipo_medida":"Temperatura","valor":24.51,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":34.1,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:45:00Z","dia":01,"sensor_id":2,"location_id":2,"medidas":[{"tipo_medida":"Emision_CO2","valor":1.957,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00215,"unidad":"kWh/m2"}]}])
 

下一个查询是我正在尝试的,但结果是错误的,因为没有显示总和,只是出现在 0 中的值。

db.test_sensores.aggregate([{$match:{'medidas.tipo_medida':'Emision_CO2'}},{$group:{_id:'$dia', acumulado_emisiones_CO2:{$sum:'$medidas.0.valor'}}}])

在我的查询中缺少如何找到 emision_co2 值 > 420 的日子,我在手动考虑,但如果有自动方法,请告诉我。 谢谢

不确定您为什么尝试按dia分组,

  1. $match
  2. $set - 将timestamp设置为 Date 对象medidas_Emision_CO2_valor ,通过过滤 ( $filter ) 将medidas数组中的所有值相加,通过$reduce带有tipo_medida的文档是“Emision_CO2”。
  3. $group - 按timestamp的日期、月份和年份分组,并将medidas_Emision_CO2_valor值相加为acumulado_emisiones_CO2
  4. $match - 过滤acumulado_emisiones_CO2大于 ( $gt ) 420 的文档。
db.test_sensores.aggregate([
  {
    $match: {
      "medidas.tipo_medida": "Emision_CO2"
    }
  },
  {
    $set: {
      timestamp: {
        $toDate: "$timestamp"
      },
      medidas_Emision_CO2_valor: {
        $reduce: {
          input: {
            $filter: {
              input: "$medidas",
              cond: {
                $eq: [
                  "$$this.tipo_medida",
                  "Emision_CO2"
                ]
              }
            }
          },
          initialValue: 0,
          in: {
            $sum: [
              "$$value",
              "$$this.valor"
            ]
          }
        }
      }
    }
  },
  {
    $group: {
      _id: {
        day: {
          "$dayOfMonth": "$timestamp"
        },
        month: {
          "$month": "$timestamp"
        },
        year: {
          $year: "$timestamp"
        }
      },
      acumulado_emisiones_CO2: {
        $sum: "$medidas_Emision_CO2_valor"
      }
    }
  },
  {
    $match: {
      "acumulado_emisiones_CO2_valor": {
        $gt: 420
      }
    }
  }
])

示例 Mongo Playground

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM