Database

[{userId:1,totalGames:10,winStats:4,lostStats:6,g1Stats:{totalGames:4,winStats:1,lostStats:3,},g2Stats:{totalGames:5,winStats:2,lostStats:3,},g3Stats:{totalGames:1,winStats:1,lostStats:0,}}]

Query

db.collection.aggregate([{"$project":{userId:1,totalGames:{"$cond":{"if":{"$eq":[{"$size":{"$concatArrays":[["g1Stats","g2Stats"]]}},0]},"then":"$$ROOT.totalGames","else":{"$reduce":{"input":["g1Stats","g2Stats"],"initialValue":0,"in":{"$sum":["$$value",{"$function":{"body":"function(key, doc) { return doc[key].totalGames }","args":["$$this","$$ROOT"],"lang":"js"},}]}}}}},winStats:{"$cond":{"if":{"$eq":[{"$size":{"$concatArrays":[["g1Stats","g2Stats"]]}},0]},"then":"$$ROOT.winStats","else":{"$reduce":{"input":["g1Stats","g2Stats"],"initialValue":0,"in":{"$sum":["$$value",{"$function":{"body":"function(key, doc) { return doc[key].winStats }","args":["$$this","$$ROOT"],"lang":"js"},}]}}}}},lostStats:{"$cond":{"if":{"$eq":[{"$size":{"$concatArrays":[["g1Stats","g2Stats"]]}},0]},"then":"$$ROOT.lostStats","else":{"$reduce":{"input":["g1Stats","g2Stats"],"initialValue":0,"in":{"$sum":["$$value",{"$function":{"body":"function(key, doc) { return doc[key].lostStats }","args":["$$this","$$ROOT"],"lang":"js"},}]}}}}}}}])

Result