Database

[{visible_id:1,status:"INITIAL"},{visible_id:2,status:"INITIAL"},{visible_id:3,status:"SCANNED"},{visible_id:4,status:"SCANNED"},{visible_id:5,status:"INITIAL"},{visible_id:6,status:"INITIAL"},{visible_id:7,status:"INITIAL"},{visible_id:8,status:"PRINTED"}]

Query

db.collection.aggregate([{$setWindowFields:{sortBy:{visible_id:1},output:{lag:{$shift:{output:"$status",by:-1}}}}},{$set:{group:{$cond:{if:{$eq:["$status","$lag"]},then:"$$REMOVE",else:"$visible_id"}}}},{$fill:{sortBy:{visible_id:1},output:{group:{method:"locf"}}}},{$match:{status:"SCANNED"}},{$group:{_id:"$group",min:{$min:"$visible_id"},max:{$max:"$visible_id"},status:{$first:"$status"}}},{$project:{_id:0,status:1,range:{$concat:[{$toString:"$min"},"-",{$toString:"$max"}]}}}])

Result