Database

[{"ent1":"A","ent2":"B"},{"ent1":"A","ent2":"D"},{"ent1":"B","ent2":"C"},{"ent1":"F","ent2":"E"},{"ent1":"G","ent2":"H"},{"ent1":"H","ent2":"I"},]

Query

db.collection.aggregate([{$group:{_id:null,ents:{$push:"$$ROOT"}}},{$project:{clusters:{$reduce:{input:"$ents",initialValue:[],in:{$cond:[{$gt:[{$size:{$filter:{input:"$$value",as:"val",cond:{$gt:[{$size:{"$setIntersection":["$$val",["$$this.ent1","$$this.ent2"]]}},0]}}}},0]},{$map:{input:"$$value",as:"val",in:{$cond:[{$gt:[{$size:{"$setIntersection":["$$val",["$$this.ent1","$$this.ent2"]]}},0]},{"$setUnion":["$$val",["$$this.ent1","$$this.ent2"]]},"$$val"]}}},{"$concatArrays":["$$value",[["$$this.ent1","$$this.ent2"]]]}]}}}}}])

Result