Database

[{"_id":1,"role":[{"plan":"free","date":ISODate("2020-01-01")},{"plan":"free","date":ISODate("2020-01-02")},{"plan":"free","date":ISODate("2020-01-03")},{"plan":"pro","date":ISODate("2020-01-04")},{"plan":"pro","date":ISODate("2020-01-05")},{"plan":"pro","date":ISODate("2020-01-06")},{"plan":"free","date":ISODate("2020-01-08")},{"plan":"free","date":ISODate("2020-01-09")}]},{"_id":2,"role":[{"plan":"pro","date":ISODate("2020-02-05")},{"plan":"pro","date":ISODate("2020-02-06")},{"plan":"pro2","date":ISODate("2020-02-07")},{"plan":"free","date":ISODate("2020-02-08")},{"plan":"free","date":ISODate("2020-02-09")},{"date":ISODate("2020-02-10")},{"plan":"pro","date":ISODate("2020-02-11")},{"plan":"pro","date":ISODate("2020-02-12")}]}]

Query

db.collection.aggregate([{$addFields:{role:{$let:{vars:{data:{$reduce:{input:{$slice:["$role",1,{$size:"$role"}]},initialValue:{roleObjs:[{$arrayElemAt:["$role",0]}],plan:{$arrayElemAt:["$role.plan",0]}},in:{roleObjs:{$cond:[{$eq:["$$this.plan","$$value.plan"]},"$$value.roleObjs",{$concatArrays:["$$value.roleObjs",["$$this"]]}]},plan:{$cond:[{$eq:["$$this.plan","$$value.plan"]},"$$value.plan","$$this.plan"]}}}}},in:"$$data.roleObjs"}}}}])

Result