我收集了该集合3字段。这些字段采用arrayIndex格式。收集样本如下
{
"_id" : ObjectId("576165f58d8b8f39458b456c"),
"EventTS" : ISODate("2016-06-07T03:30:00.000+0000"),
"PowerStatus" : [
NumberInt(1),
NumberInt(1),
null,
NumberInt(1),
null
],
"TempStatus" : [
NumberInt(1),
null,
NumberInt(1),
null,
null
],
"UPSStatus" : [
NumberInt(1),
null,
NumberInt(1)
]
}
这是我收集一条记录的样本。基本上PowerStatus,TempStatus和UPSStatus是arrayindex格式。在此字段中,数据仅存储1或空值。首先,我必须在个人档案中计算1,之后我必须计算PowerStatus,TempStatus和UPSStatus的平均值。我尝试以这种格式获得结果,如下所示
{
"result": [
{
"PowerStatus": 77,
"TempStatus": 12,
"UPSStatus": 11
}
]
}
当我想要输出之后查询执行时像PowerStatus的集合平均值是77,TempStatus是12,UPSStatus是11.请建议我如何计算3个平均值?
答案 0 :(得分:0)
您可以使用聚合框架。
由于我们没有您的数据集,我们无法查询结果 - 但请参阅下面提出的ypur问题解决方案;
db.dhsari.aggregate([{
$unwind : "$PowerStatus"
}, {
$unwind : "$TempStatus"
}, {
$unwind : "$UPSStatus"
}, {
$group : {
_id : null,
PowerStatus : {
$avg : "$PowerStatus"
},
TempStatus : {
$avg : "$TempStatus"
},
UPSStatus : {
$avg : "$UPSStatus"
},
}
}, {
$project : {
_id : 0,
result : [{
"PowerStatus" : "$PowerStatus",
"TempStatus" : "$TempStatus",
"UPSStatus" : "$UPSStatus"
}
]
}
}
])