Database
[{active_date:ISODate("2022-01-18"),user_id:1},{active_date:ISODate("2022-01-17"),user_id:1},{active_date:ISODate("2022-01-16"),user_id:1},{active_date:ISODate("2022-01-14"),user_id:1},{active_date:ISODate("2022-01-18"),user_id:2},{active_date:ISODate("2022-01-15"),user_id:2},{active_date:ISODate("2022-01-14"),user_id:2},{active_date:ISODate("2022-01-13"),user_id:2},]
Query
db.collection.aggregate([{"$addFields":{"active_date":{"$toLong":"$active_date"}}},{$setWindowFields:{partitionBy:"$user_id",sortBy:{active_date:1},output:{days:{$push:"$active_date",window:{range:[-86400000,/** one day in millisecond*/0]}}}}},{"$set":{"days":{"$cond":[{"$gt":[{"$size":"$days"},1]},0,1]}}},{$setWindowFields:{partitionBy:"$user_id",sortBy:{active_date:1},output:{count:{$sum:"$days",window:{documents:["unbounded","current"]}}}}},{"$group":{"_id":{user_id:"$user_id",count:"$count",},"active_days":{$sum:1},"to":{"$max":"$active_date"},"from":{"$min":"$active_date"}}},{"$sort":{to:-1}},{"$group":{"_id":"$_id.user_id","last_active_days":{"$first":"$active_days"}}}])