Database
[{ip:"1.1.1.1",process:"123",type:"success",date:ISODate("2021-05-01")},{ip:"1.1.1.1",process:"123",type:"failure",date:ISODate("2021-04-01")},{ip:"1.1.1.2",process:"124",type:"failure",date:ISODate("2021-03-01")},{ip:"1.1.1.1",process:"123",type:"failure",date:ISODate("2021-02-01")},{ip:"1.1.1.1",process:"123",type:"success",date:ISODate("2021-01-01")}]
Query
db.collection.aggregate([{$match:{ip:"1.1.1.1",process:"123",type:"success"}},{"$sort":{date:-1}},{$limit:1},{"$lookup":{"from":"collection",let:{ip:"$ip",process:"$process",date:"$date"},pipeline:[{$match:{$expr:{$and:[{$eq:["$ip","$$ip"]},{$eq:["$process","$$process"]},{$lt:["$date","$$date"]},{$eq:["$type","success"]}]}}},{$sort:{date:-1}},{$limit:1}],"as":"lastSuccess"}},{"$unwind":{path:"$lastSuccess",preserveNullAndEmptyArrays:true}},{"$lookup":{"from":"collection",let:{ip:"$ip",process:"$process",date:{$ifNull:["$lastSuccess.date",ISODate("9999-12-31")]}},pipeline:[{$match:{$expr:{$and:[{$eq:["$ip","$$ip"]},{$eq:["$process","$$process"]},{$gte:["$date","$$date"]},{$eq:["$type","failure"]}]}}}],"as":"previousFailures"}},{"$addFields":{"lastFailuresCount":{$size:"$previousFailures"}}}])