Database
db={"account_models":[{"_id":1,"name":"Account 1","sessions":[{"_id":1},{"_id":2},]},{"_id":2,"name":"Account 2","sessions":[{"_id":3},]}],"session_models":[{"_id":1,"name":"session - 1","trades":[{"_id":1},]},{"_id":2,"name":"session - 1","trades":[{"_id":2},{"_id":3},]},{"_id":3,"name":"session - 1","trades":[{"_id":4},]}],"trade_models":[{"_id":1,"session_id":1,"symbol":{"_id":1},"open":{"gain":10,"date":"20220909",timeframe:{"_id":1}},"closes":[{"gain":10,timeframe:{"_id":1}},{"gain":10,timeframe:{"_id":1}}],"tags":[{"_id":1},{"_id":2}]},{"_id":2,"session_id":2,"symbol":{"_id":1},"open":{"gain":10,"date":"20220907",timeframe:{"_id":1}},"closes":[{"gain":10,timeframe:{"_id":1}},{"gain":10,timeframe:{"_id":1}}],"tags":[{"_id":1}]},{"_id":3,"session_id":2,"symbol":{"_id":1},"open":{"gain":10,"date":"20220920",timeframe:{"_id":1}},"closes":[{"gain":10,timeframe:{"_id":1}},{"gain":10,timeframe:{"_id":1}}],"tags":[]},{"_id":4,"session_id":3,"symbol":{"_id":1},"open":{"gain":10,"date":"20220902",timeframe:{"_id":1}},"closes":[{"gain":10,timeframe:{"_id":1}},{"gain":10,timeframe:{"_id":1}}],"tags":[{"_id":2}]}],"symbol_models":[{"_id":1,name:"Symbol-1"}],"timeframe_models":[{"_id":1,name:"t1"}],"tag_models":[{"_id":1,name:"tag1"},{"_id":2,name:"tag2"}]}
Query
db.account_models.aggregate([{/** populate session_models*/$lookup:{from:"session_models",localField:"sessions._id",foreignField:"_id",as:"sessions"}},{/** populate trade_models*/$lookup:{from:"trade_models",localField:"sessions.trades._id",foreignField:"_id",as:"trade"}},{/** unwind trades*/$unwind:"$trade"},{/** Sort trade by date*/$sort:{"trade.open.date":1}},{/** populate symbol*/$lookup:{from:"symbol_models",localField:"trade.symbol._id",foreignField:"_id",as:"trade.symbol"}},{$unwind:"$trade.symbol"},{/** populate open.timeframe*/$lookup:{from:"timeframe_models",localField:"trade.open.timeframe._id",foreignField:"_id",as:"trade.open.timeframe"}},{$unwind:"$trade.open.timeframe"},{/** populate session for each trade*/$lookup:{from:"session_models",localField:"trade.session_id",foreignField:"_id",as:"session"}},{$unwind:"$session"},{$project:{"name":1,"trade":1,"session.name":1,}}])