Database
db={"users":[{"_id":ObjectId("5e970a1f797c08e70ce4e2f6"),"user_id":"testuserid","first_name":"Jacopo","last_name":"Belbo","email":"test@test.com"}],"feeds":[{"_id":ObjectId("5f29b02318ecbf0083f01f1e"),"name":"test csv","user_id":"auth0|5eac6faa1cc1ac0c147b5b16","type":"feed","created_at":ISODate("2020-08-04T18:59:47.640Z"),"updated_at":ISODate("2020-08-04T18:59:47.640Z")},{"_id":ObjectId("5f29b05d18ecbf0083f01f1f"),"name":"typtap-small","user_id":"auth0|5f1b2da0e60194003d714680","url":"http://localstack:4572/atlas/usertes","type":"feed","created_at":ISODate("2020-08-04T19:00:45.886Z"),"updated_at":ISODate("2020-08-04T19:00:45.886Z")}],"shares":[{"_id":ObjectId("5f29b07318ecbf0083f01f20"),"feed_id":ObjectId("5f29b05d18ecbf0083f01f1f"),"share":"test@test.com","type":"share","recipient":"email","created_at":ISODate("2020-08-04T19:01:07.668Z"),"updated_at":ISODate("2020-08-04T19:01:07.668Z")}]}
Query
db.users.aggregate([{$match:{user_id:"testuserid"}},{$lookup:{from:"feeds",localField:"user_id",foreignField:"user_id",as:"feeds"}},{$lookup:{from:"shares",localField:"email",foreignField:"share",as:"shares"}},{$unwind:{path:"$shares",preserveNullAndEmptyArrays:false}},{$lookup:{from:"feeds",let:{shareId:"$shares.feed_id"},pipeline:[{$match:{$expr:{$eq:["$$shareId","$_id"]}}}],as:"shared_feeds"}},{$group:{_id:"$_id",user_id:{$first:"$user_id"},first_name:{$first:"$first_name"},last_name:{$first:"$last_name"},email:{$first:"$email"},feeds:{$first:"$feeds"},shares:{$addToSet:"$shares"},shared_feeds:{$addToSet:"$shared_feeds"}}},{$addFields:{shared_feeds:{$reduce:{input:"$shared_feeds",initialValue:[],in:{$setUnion:["$$this","$$value"]}}}}},{$addFields:{"shared_feeds.share":true}},{$project:{user_id:1,first_name:1,last_name:1,email:1,feeds:{$concatArrays:["$feeds","$shared_feeds"]}}}])