Database

[{reciever:"John",sender:"David"},{reciever:"Daniel",sender:"David"},{reciever:"Kevin",sender:"Robert"},{reciever:"David",sender:"James"},{reciever:"David",sender:"John"}]

Query

db.collection.aggregate([{$match:{$or:[{sender:"David"},{reciever:"David"}]}},{$group:{_id:0,recievers:{$addToSet:"$reciever"},senders:{$addToSet:"$sender"}}},{$project:{_id:"David",previousChats:{"$setDifference":[{$setUnion:["$recievers","$senders"]},["David"]]}}}])

Result