Database
db={patients:[{_id:"60f5a851e8b5d11111111",firstName:"test_1",lastName:"test_last_1"},{_id:"60f5a851e8b5d11111112",firstName:"test_2",lastName:"test_last_2"},],messages:[{_id:"60f5a851e8b5d11111111",body:"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",createdByPatient:null,createdByUser:"60e888ac01198632222222"},{_id:"60f5a851e8b5d11111112",body:"It's a great day",createdByPatient:"60f5a851e8b5d11111111",createdByUser:null},{_id:"60f5a851e8b5d11111113",body:"I'm a message",createdByPatient:"60f5a851e8b5d11111111",createdByUser:null},]}
Query
db.patients.aggregate([{$lookup:{from:"messages",let:{patientId:"$_id"},pipeline:[{$match:{$expr:{$and:[{$eq:["$createdByPatient","$$patientId"]},{$regexMatch:{input:"$body",regex:"day",options:"i"}}]}}}],as:"messages"}},{$set:{lastMessage:{$arrayElemAt:["$messages",-1]}}},{$unset:"messages"}])