Database

[{"_id":"XCUZO0","date":ISODate("2020-02-01T00:00:03.243Z"),"total":9.99,"source":"APP"},{_id:"XCUZO1",date:ISODate("2020-01-05T00:00:03.243Z"),total:9.99,source:"WEB"},{_id:"XCUZO2",date:ISODate("2020-01-02T00:00:03.243Z"),total:9.99,source:"WEB"}]

Query

db.collection.aggregate([{$group:{_id:{month:{$month:"$date"},year:{$year:"$date"}},total:{$sum:"$total"},countByApp:{$sum:{$cond:[{$eq:["$source","APP"]},1,0]}},countByWeb:{$sum:{$cond:[{$eq:["$source","WEB"]},1,0]}},}}])

Result