2
{
"_id" : ObjectId("58f5a22d22679039176d2ee8"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:01:01.000+05:30"),
"Utilization" : NumberInt("63654480"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681350")
},
{
"_id" : ObjectId("58f5a22d22679039176d2ee9"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:02:02.000+05:30"),
"Utilization" : NumberInt("63655480"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681370")
},
{
"_id" : ObjectId("58f5a22d22679039176d2eea"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:03:02.000+05:30"),
"Utilization" : NumberInt("63656480"),
"RunStatus" : NumberInt("0"),
"ProductsCount" : NumberInt("681390")
},
{
"_id" : ObjectId("58f5a22d22679039176d2eeb"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:04:02.000+05:30"),
"Utilization" : NumberInt("63657480"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681420")
},
{
"_id" : ObjectId("58f5a22d22679039176d2eec"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:05:02.000+05:30"),
"Utilization" : NumberInt("63658480"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681450"),
},
{
"_id" : ObjectId("58f5a22d22679039176d2eed"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:06:02.000+05:30"),
"Utilization" : NumberInt("63659480"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681470")
},
{
"_id" : ObjectId("58f5a22d22679039176d2eee"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:07:02.000+05:30"),
"Utilization" : NumberInt("63659780"),
"RunStatus" : NumberInt("0"),
"ProductsCount" : NumberInt("681490")
},
{
"_id" : ObjectId("58f5a22d22679039176d2eef"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:08:03.000+05:30"),
"Utilization" : NumberInt("63659880"),
"RunStatus" : NumberInt("1"),
"ProductsCount" : NumberInt("681525")
},
{
"_id" : ObjectId("58f5a22d22679039176d2ef0"),
"MachineID" : NumberInt("1001"),
"Timestamp" : ISODate("2017-04-18T07:09:03.000+05:30"),
"Utilization" : NumberInt("63659980"),
"RunStatus" : ("0"),
"ProductsCount" : NumberInt("681563")
}
的分组从上述收集,利用和ProductsCount是累积值和增量随着时间的推移。MongoDB的聚合查询和减去累积值
需要减去当前行的利用与下一行的利用这是按升序排序。以及相同的操作产品总数根据运行状态。
如果当前行的RunStatus是1,下一行是0,则在利用和ProductsCount的差应该被映射到下一行的RunStatus是0
然后组它基于机号和RunStatus
预期结果
/* 1 */
{
"MachineID" : 1001,
"RunStatus" : 1,
"Utilization" : 4100,
"ProducedCount" : 135
},
/* 2 */
{
"MachineID" : NumberInt("1001"),
"RunStatus" : NumberInt("0"),
"Utilization" : 1400,
"ProducedCount" : 78
}
聚合框架中需要结果。请帮忙。
这是我尝试过,
db.collection.aggregate([
{ "$match" : { "$and" : [ { "MachineID" : { "$in" : [ 1001]}} ,
{ "Timestamp" : { "$gte" : ISODate("2017-04-18T01:30:00.000Z"),
"$lte" : ISODate("2017-04-19T01:30:00.000Z")}},]}
},
{
"$addFields": {"lastUtilization": 0}
},
{
"$addFields": {"lastProductsCount" : 0}
},
{
"$group": {
"_id":
{
MachineID : '$MachineID',
"RunStatus": "$RunStatus"
},
"Utilization" :
{
"$sum" :
{
"$cond": [
{ "$ne": [ "$lastUtilization", 0 ] },
{"$subtract" : ["$Utilization",
"$lastUtilization"]}, 0
]
}
},
"ProductsCount" :
{
"$sum" :
{
"$cond": [
{ "$ne": [ "$lastProductsCount", 0 ] },
{"$subtract" : ["$ProductsCount",
"$lastProductsCount"]}, 0
]
}
},
"lastProductsCount" : { "$avg" : "$ProductsCount"},
"lastUtilization" : { "$avg" : "$Utilization"}
}
},
{
"$project":
{
"MachineID": "$_id.MachineID",
"RunStatus" : "$_id.RunStatus",
"Utilization" : "$Utilization",
"ProductsCount" : "$ProductsCount"
}
},
]);
查理斯旺森的奇妙的东西。很棒的作品.. !!! – user2114103