Database
[{field1:1,field2:2,value:12},{field1:1,value:1},{field2:2,value:2},{field1:2,field2:3,value:23},{field1:1,field2:2,value:21}]
Query
db.collection.aggregate([{$lookup:{from:"collection",let:{field1:"$field1",field2:"$field2",docId:"$_id"},pipeline:[{$match:{$expr:{$and:[{$or:[{$eq:["$$field1","$field1"]},{$eq:["$$field2","$field2"]}]},{$ne:["$$docId","$_id"]}]}}},{$project:{value:1}}],as:"relatedData"}},{$group:{_id:{field1:"$field1",field2:"$field2"},values:{$push:"$value"},relatedValue:{$push:{$map:{input:"$relatedData",in:"$$this.value"}}}}},{$project:{field1:"$_id.field1",field2:"$_id.field2",values:1,relatedValues:{"$setDifference":[{"$reduce":{input:"$relatedValue",initialValue:[],in:{"$setUnion":["$$this","$$value"]}}},"$values"]}}}])