Database
[{"userId":1,"data":"aaaaa",version:1,mainVersion:1},{"userId":2,"data":"bbbbb",version:1,mainVersion:1},{"userId":2,"data":"bbbbbx",version:2,mainVersion:1},{"userId":2,"data":"bbbbbxx",version:3,mainVersion:1},{"userId":1,"data":"cancelled!!!",version:2,mainVersion:1},{"userId":2,"data":"bbbbbxxx",version:4,mainVersion:1},{"userId":1,"data":"aaaaa-",version:1,mainVersion:2},{"userId":2,"data":"bbbbbxxx-",version:4,mainVersion:2},{"userId":2,"data":"bbbbbxxx-x",version:5,mainVersion:2},{"userId":2,"data":"bbbbbxxx-",version:4.5,mainVersion:2},{"userId":1,"data":"aaaaa-x",version:2,mainVersion:2},{"userId":1,"data":"cancelled!!!",version:3,mainVersion:1}]
Query
db.collection.aggregate([{$group:{_id:"$userId"}},{"$lookup":{"from":"collection","let":{uid:"$_id"},"pipeline":[{$match:{$expr:{$eq:["$$uid","$userId"]}}},{$sort:{mainVersion:-1,version:1}},{"$limit":1}],"as":"top1"}},{$unwind:"$top1"},{"$replaceRoot":{"newRoot":"$top1"}}])