Database

db={"course":[{_id:1,name:"Course1",price:"100"},{_id:2,name:"Course2",price:"200"}],"files":[{_id:1,name:"File1",isFree:true,courseId:1},{_id:2,name:"File2",isFree:true,courseId:1},{_id:3,name:"File3",isFree:false,courseId:1}]}

Query

db.course.aggregate([{$lookup:{from:"files",let:{courseId:"$_id"},pipeline:[{$match:{$expr:{$eq:["$$courseId","$courseId"]}}},{$group:{_id:"$isFree",count:{$sum:1}}},{$project:{_id:0,k:{$cond:["$_id","free","paid"]},v:"$count"}}],as:"files"}},{$addFields:{files:{$arrayToObject:"$files"}}},{$addFields:{"files.free":{$ifNull:["$files.free",0]},"files.paid":{$ifNull:["$files.paid",0]}}}])

Result