我在该系列中收集了 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}}
);
此查询提供正确的输出,但需要时间来计算百分比。我可以创建更好的查询来计算百分比吗?如果是,那么请建议我如何创建更好的查询?