Database
[{"key":1,"user":"A","comment":"commentA1"},{"key":2,"user":"A","comment":"commentA2"},{"key":3,"user":"A","comment":"commentA3"},{"key":5,"user":"A","comment":"commentA5"},{"key":6,"user":"A","comment":"commentA6"},{"key":2,"user":"B","comment":"commentB2"},{"key":3,"user":"B","comment":"commentB3"},{"key":6,"user":"B","comment":"commentB6"},{"key":6,"user":"C","comment":"commentC6"},{"key":8,"user":"C","comment":"commentC8"},{"key":9,"user":"C","comment":"commentC9"},{"key":12,"user":"C","comment":"commentC12"}]
Query
db.collection.aggregate([{$sort:{"key":1}},{$group:{_id:"$user",data:{$push:{key:"$key",comment:"$comment"}},shadow:{$push:{$add:["$key",1]}}}},{$project:{data:1,shadow:{$filter:{input:"$shadow",cond:{$in:["$$this","$data.key"]}}}}},{$project:{data:1,shadow:1,firstItem:{$subtract:[{$first:"$shadow"},1]}}},{$project:{data:1,firstItem:1,shadow:{$concatArrays:[["$firstItem"],"$shadow"]}}},{$project:{data:1,shadow:{$reduce:{input:{$range:[0,{$size:"$shadow"}]},initialValue:[],in:{$concatArrays:["$$value",{$cond:[{$eq:[{$arrayElemAt:["$shadow","$$this"]},{"$add":["$$this","$firstItem"]}]},[{$arrayElemAt:["$shadow","$$this"]}],[]]},]}}}}},{$project:{data:{$filter:{input:"$data",cond:{$in:["$$this.key","$shadow"]}}}}},{$unwind:"$data"},{$project:{comment:"$data.comment",key:"$data.key"}}])