As per your suspect yes i agree that aggregation query is quiet inefficient. I am not sure if you have supportive index to these?
Base collection from where you running aggregate query should have below index: { "seller_company_id": 1,'meetings.is_meeting_deleted':1, "is_deleted": 1,"is_hidden": 1 }
It is ok if you dont have 'meetings.is_meeting_deleted':1 in index as it is multikey.
And for the joining collection Company _id default index is sufficient.
Seems the CPU utilisation is pretty high 100% and as per the real time tab screenshot there seem lot of getMore running. I believe it is either Atlas search or the change stream. Can you help with what are the most common getMore command running?
with above info we can find some clue.
thanks, Darshan