如何计算mongoDB中的百分比?

时间:2016-06-27 06:30:59

标签: mongodb mongodb-query

我在该系列中收集了 UPSTempStatus 字段。这些字段采用arrayIndex格式。收集样本如下

  { 
    "_id" : ObjectId("576165f58d8b8f39458b456c"), 
    "EventTS" : ISODate("2016-06-07T03:30:00.000+0000"), 
    "UPSTempStatus" : [
       NumberInt(1), 
       NumberInt(2), 
       null, 
       NumberInt(0), 
       null
     ], 
    "TempStatus" : [
       NumberInt(1), 
       null, 
       NumberInt(1), 
       null, 
       null
    ], 
    "UPSStatus" : [
       NumberInt(1), 
       null, 
       NumberInt(1)
    ]

}

这是我收集一条记录的样本。基本上我想要计算UPSTempStatus的百分比。为此我创建了一个查询来计算我的查询百分比,如下所示

    db.PMS.aggregate(
    {
        $project:{
            UPSTempStatus:1
        } 
    },
    { 
        $unwind : "$UPSTempStatus" 
    },
    {   
        $match: 
        {
            UPSTempStatus: {$ne:null} 
        } 
    },
    {   
        $group : { 
            _id:null, 
            totalcount : {$sum:1},
            LowTemp: {
                $sum:{
                    $cond:[{$eq:["$UPSTempStatus",0]},1,0]
                    }},
            HighTemp: {
                $sum:{
                    $cond:[{$eq:["$UPSTempStatus",2]},1,0]
                    }},
            NormalTemp: {
                $sum:{
                    $cond:[{$eq:["$UPSTempStatus",1]},1,0]
                    }},
            Error4: {
                $sum:{
                    $cond:[{$eq:["$UPSTempStatus",4]},1,0]
                    }},
            Error5: {
                $sum:{
                    $cond:[{$eq:["$UPSTempStatus",5]},1,0]
                    }},
    }},
    {$project:
    {
        LowTempPer:{ 
            $multiply:[{ $divide: ["$LowTemp","$totalcount"]},100]
        } , 
        NormalTempPer:{ 
            $multiply:[{ $divide: ["$NormalTemp","$totalcount"]},100]
        },
        HighTempPer:{ 
            $multiply:[{ $divide: ["$HighTemp","$totalcount"]},100]
        }
    }} ,
    {$sort: {_id:-1}}
);

此查询提供正确的输出,但需要时间来计算百分比。我可以创建更好的查询来计算百分比吗?如果是,那么请建议我如何创建更好的查询?

0 个答案:

没有答案