Database
[{"key":1,"val":"1"},{"key":2,"val":"1"},{"key":3,"val":"1"},{"key":4,"val":"2"}]
Query
db.collection.aggregate([{"$addFields":{"randSortKey":{"$rand":{}}}},{"$setWindowFields":{"partitionBy":null,"sortBy":{"randSortKey":1},"output":{"rank":{"$rank":{}},total:{$sum:1}}}},{"$match":{$expr:{$lte:[{"$divide":["$rank","$total"]},0.5]}}},{"$unset":["randSortKey","rank","total"]}])