【问题标题】:Average MongoDB平均 MongoDB
【发布时间】:2021-09-10 17:26:55
【问题描述】:

我唯一想做的就是获取位置:1 的所有天晚上 10 点消耗的 Emision_C02 平均值。集合 db.datos_sensores2 包含以下文档:

{
    "_id" : ObjectId("609c2c2d420a73728827e87f"),
    "timestamp" : ISODate("2020-07-01T02:15:00Z"),
    "sensor_id" : 1,
    "location_id" : 1,
    "medidas" : [
        {
            "tipo_medida" : "Temperatura",
            "valor" : 14.03,
            "unidad" : "ºC"
        },
        {
            "tipo_medida" : "Humedad_relativa",
            "valor" : 84.32,
            "unidad" : "%"
        }
    ]
}
{
    "_id" : ObjectId("609c2c2d420a73728827e880"),
    "timestamp" : ISODate("2020-07-01T02:15:00Z"),
    "sensor_id" : 2,
    "location_id" : 1,
    "medidas" : [
        {
            "tipo_medida" : "Emision_CO2",
            "valor" : 1.67,
            "unidad" : "gCO2/m2"
        },
        {
            "tipo_medida" : "Consumo_electrico",
            "valor" : 0.00155,
            "unidad" : "kWh/m2"
        }
    ]
}

这是我写的:

db.datos_sensores2.aggregate([
{$project:{timestamp:{$dateFromString:{dateString:'$timestamp'}},"_id":0, "me-didas":{$slice:["$medidas",-1]},"location_id":1}},
{$addFields:{Hora:{$hour:"$timestamp"}}},
{$match:{'Hora':{$in:[10]},'medidas.tipo_medida':"Emision_CO2", "location_id":1}},
{$group:{ _id: null, Avg_Emision_CO2:{$avg: "$medidas.valores"}}}])

但是什么都没有发生......

【问题讨论】:

    标签: mongodb average


    【解决方案1】:

    请参考https://mongoplayground.net/p/-LqswomHWsY

    我注意到一些事情首先在上面的例子中是 2 而不是 10。其次变量/字段名称不正确,所以我已经更新了它。

    [{$unwind: {
      path: '$medidas',
    }}, {$addFields: {
      Hora: {
        $hour: "$timestamp"
      }
    } }, {$match: {
      "Hora": {
        $in: [2] 
      },
      "medidas.tipo_medida": "Emision_CO2",
      "location_id": 1
    }  }, {$group: {
      _id: null,
      Avg_Emision_CO2: {
        $avg: "$medidas.valor"
      }
    }}]
    

    管道阶段:

    • 展开:由于 $medidas 是数组,我们可以展开它,以便仅过滤“Emision_CO2”,
    • addfield:从时间戳添加小时
    • 匹配:匹配“medidas.tipo_medida”:“Emision_CO2”,
    • 组:取平均值

    【讨论】:

    • 您好程序员分析师,非常感谢您抽出宝贵时间!我只需要进行一些更改,但您的帮助非常有帮助!谢谢你的时间,特别是你的解释。它帮助我理解:db.datos_sensores2.aggregate([{$project:{timestamp:{$dateFromString:{dateString:'$timestamp'}},"_id":0, "medidas":{$slice:["$medidas",1]},"location_id":1, "sensor_id":1}},{$unwind:{path:"$medidas",}},{$addFields:{Hora:{$hour:'$timestamp'}}},{$match:{"Hora":{$in:[10]},"medidas.tipo_medida":"Emision_CO2","location_id":1}},{$group:{_id:null,Avg_Emision_CO2:{$avg:"$medidas.valor"}}}])
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多