我正在尝试计算我的车队的利用率。这样做的公式是(以秒为单位移动的时间+以秒为单位的空闲时间)/ [(一天中的总秒数)* 100,即864]。
这是我当前的聚合管道,适用于time_moving
。如何在其中加入time_idling
? time_moving
和time_idling
都可以在同一架构中使用。
{"$group": {
"_id": {
"customer": "$customer",
"date": "$date"
},
"percentage": {
"$avg": {"$divide": ["$time_moving", 864]}
}
}}
数据集(两个客户,c1和c2,每个车队有两辆车,v1和v2,两天,d1和d2):
customer date time_moving time_idling vehicle
c1 d1 8200 400 v1
c1 d1 28200 0 v2
c2 d1 6400 800 v1
c2 d1 19900 100 v2
c1 d2 65500 500 v1
c1 d2 9800 100 v2
c2 d2 55000 200 v1
c2 d2 13000 200 v2
示例输出(或具有相同数据点的不同结构化输出):
{ "_id" : { "customer" : "c1", "date" : "d1" }, "percentage" : 42.59... }
{ "_id" : { "customer" : "c1", "date" : "d2" }, "percentage" : 87.84... }
{ "_id" : { "customer" : "c2", "date" : "d1" }, "percentage" : 31.48... }
{ "_id" : { "customer" : "c2", "date" : "d2" }, "percentage" : 79.16... }
答案 0 :(得分:1)
尝试以下聚合:
db.col.aggregate([
{
$group: {
_id: { "customer": "$customer", "date": "$date" },
percentage: { $sum: { $add: [ "$time_moving", "$time_idling" ] } }
}
},
{
$addFields: {
percentage: {
$divide: [ "$percentage", 864 ]
}
}
}
])
您可以使用$sum
获取每个组的所有time_moving
和time_idling
,然后使用$divide
将该值除以秒数。