Database

[{id:1,user:1,gameCategory:"aaa/traditional",gameName:"Artifact"},{id:2,user:1,gameCategory:"web3",gameName:"Axie Infinity"},{id:3,user:2,gameCategory:"aaa/traditional",gameName:"League of Legends"},{id:4,user:4,gameCategory:"web3",gameName:"League of Legends"},{id:6,user:6,gameCategory:"web3",gameName:"League of Legends"},{id:7,user:7,gameCategory:"web3",gameName:"League of Legends"},{id:8,user:8,gameCategory:"other",gameName:"other"},{id:9,user:6,gameCategory:"other",gameName:"other"},]

Query

db.collection.aggregate([{$group:{_id:"$user",other:{$addToSet:{$cond:[{$and:[{$ne:["$gameCategory","web3"]},{$ne:["$gameCategory","aaa/traditional"]}]},"true","$$REMOVE"]}},groupType:{$addToSet:{$cond:[{$or:[{$eq:["$gameCategory","web3"]},{$eq:["$gameCategory","aaa/traditional"]}]},"$gameCategory","$$REMOVE"]}}}},{$project:{other:{$size:"$other"},groupType:{$cond:[{$eq:[{$size:"$groupType"},1]},{$arrayElemAt:["$groupType",0]},"both"]}}},{$project:{groupType:{$cond:[{$eq:["$other",1]},"other","$groupType"]}}},{$group:{_id:"$groupType",users:{$push:"$_id"}}}])

Result