Database

[{country:"Great Britain",data:[{school:"King Alberts",staff:[{name:"John",age:37,position:"Head Teacher"},{name:"Grace",age:63,position:"Retired"},{name:"Bob",age:25,position:"Receptionist"}]},{school:"St Johns",staff:[{name:"Alex",age:22,position:"Head of Drama"},{name:"Grace",age:51,position:"English Teacher"},{name:"Jack",age:33,position:"Receptionist"}]},/** ... more schools*/]}]

Query

db.collection.aggregate([{$match:{"data.staff.name":{$in:["Bob","Grace","John"]}}},{$addFields:{data:{$filter:{input:"$data",cond:{$eq:[{$size:{"$setIntersection":["$$this.staff.name",["Bob","Grace","John"]]}},{$size:"$$this.staff"}]}}}}}])

Result