2016-08-01 75 views
0

我必须计算每天收集的平均值。我在每分钟的基础上创建了一个查询。现在我想每天平均转换这个查询。 我每分钟的查询,如下所示如何使用MongoDB计算每日平均字段?

db.voltage.aggregate(
{ 
    $unwind: { 
     path:"$KeyValues", 
     includeArrayIndex:"arrayIndex", 
     preserveNullAndEmptyArrays:true 
    } 
}, 
{ 
    $project: { 
      timestamp:{ 
"$add":["$EventTS",{"$multiply":[60000,"$arrayIndex"]}] 
      } , 
     "RVoltage":"$KeyValues.RVoltage", 
     arrayIndex:1, 
     } 
}, 
{ 
    $match: { 
     $and: [ 
      {RVoltage: {$ne: null}} 
     ] 
    } 
} 
); 

您能否提供我如何每天计算平均?

+1

可以请你的样本文件更新? –

+0

@CS_noob我更新我的问题并添加了我的样本集合。 –

回答

1

集团按日期

db.voltage.aggregate([ 
    {$project: { 
     date: {$dateToString: {format: "%Y-%m-%d", date: "$EventTS"}}, 
     KeyValues:1 
    }}, 
    {$unwind: '$KeyValues'}, 
    {$project: { 
     date: 1, 
     RVoltage: '$KeyValues.RVoltage' 
    }}, 
    {$group: { 
     _id: '$date', 
     avg: {$avg: '$RVoltage'} 
    }}, 
    {$sort: {_id: 1}} 
]) 
{ "_id" : "2015-07-02", "avg" : 234.1845454545454 } 
{ "_id" : "2016-06-30", "avg" : 249.9316666666667 } 
{ "_id" : "2016-07-01", "avg" : 244.08681818181822 } 
+0

谢谢多多最后计算平均值 –

+0

查询时间超过24秒超过5个lac记录 –

+0

我必须将$ date转换为毫秒..我可以如何做到这一点。请建议我如何将$ date转换为毫秒 –