Database
[{"id":"64f142e1d224858b66c9d987","Log":[{"status":"Start","time":"09/02/2023 06:17:51","ISOdate":ISODate("2023-09-02T00:47:51.420Z")},{"status":"Hold","time":"09/02/2023 06:17:57","ISOdate":ISODate("2023-09-02T00:47:57.701Z")},{"status":"Holdrelease","time":"09/03/2023 07:17:11","ISOdate":ISODate("2023-09-03T01:47:11.662Z")},{"status":"Finish","time":"09/03/2023 07:57:46","ISOdate":ISODate("2023-09-03T02:27:46.841Z")}]}]
Query
db.collection.aggregate([{$project:{totalTime:{$dateDiff:{startDate:{$first:"$Log.ISOdate"},endDate:{$last:"$Log.ISOdate"},unit:"hour"}},holdTime:{$reduce:{input:{$filter:{input:"$Log",as:"item",cond:{$in:["$$item.status",["Hold","Holdrelease"]]}}},initialValue:{totalHold:0,holdingSince:{$first:"$Log.ISOdate"},isHolding:false},in:{$mergeObjects:["$$value",{$cond:[{$eq:["$$this.status","Hold"]},{$cond:[{$eq:["$$value.isHolding",false]},{holdingSince:"$$this.ISOdate",isHolding:true},{}]},{totalHold:{$add:["$$value.totalHold",{$dateDiff:{startDate:"$$value.holdingSince",endDate:"$$this.ISOdate",unit:"hour"}}]},isHolding:false}]}]}}}}},{$project:{_id:0,totalTime:1,holdTime:"$holdTime.totalHold",workTime:{$subtract:["$totalTime","$holdTime.totalHold"]}}}])