Database

[{"_id":17,"members":[{"email":"test@gmail.com","status":"pending","joined":ISODate("2020-05-20T02:04:00Z")},{"email":"javatutorials2016@gmail.com","status":"pending","joined":ISODate("2020-05-20T02:36:00Z")}],"messages":[{"c":"m0","ts":ISODate("2020-05-20T04:36:31Z")},{"c":"m1","ts":ISODate("2020-05-20T02:04:15Z")},{"c":"m2","ts":ISODate("2020-05-20T02:36:31Z")},{"c":"m3","ts":ISODate("2020-05-20T01:36:31Z")}]}]

Query

db.collection.aggregate([{$match:{_id:17,"members.email":"javatutorials2016@gmail.com"}},{$addFields:{members:{$arrayElemAt:["$members",{$indexOfArray:["$members.email","javatutorials2016@gmail.com"]}]}}},{$addFields:{messages:{$let:{vars:{messagesArr:{$reduce:{input:"$messages",initialValue:{data:[],joinedTime:"$members.joined"},in:{data:{$cond:[{$gte:["$$this.ts","$$value.joinedTime"]},{$concatArrays:["$$value.data",["$$this"]]},"$$value.data"]},joinedTime:"$$value.joinedTime"}}}},in:"$$messagesArr.data"}}}}])

Result