export const getWinsPipeline = ( match , key ) => [ { $match : match } , { $project : { _id : 0 , matches : { $reduce : { input : `$${ key }` , initialValue : { acc : [ ] , index : 0 } , in : { acc : { $concatArrays : [ '$$value.acc' , [ { player : { $slice : [ '$$this' , 2 ] } , winner : { $arrayElemAt : [ '$$this' , 2 ] } , round : { $switch : { branches : [ { case : { $lt : [ '$$value.index' , 4 ] } , then : 1 } , { case : { $lt : [ '$$value.index' , 6 ] } , then : 2 } ] , default : 3 } } } ] ] } , index : { $add : [ '$$value.index' , 1 ] } } } } } } , { $project : { match : '$matches.acc' } } , { $unwind : '$match' } , { $unwind : '$match.player' } , { $project : { player : '$match.player' , round : '$match.round' , hasWon : { $cond : { if : { $eq : [ '$match.player' , '$match.winner' ] } , then : 1 , else : 0 } } } } , { $group : { _id : { player : '$player' , round : '$round' } , totalCount : { $sum : 1 } , count : { $sum : '$hasWon' } } } , { $project : { _id : 0 , player : '$_id.player' , round1 : { $cond : { if : { $eq : [ '$_id.round' , 1 ] } , then : { totalCount : '$totalCount' , count : '$count' , percentage : { $divide : [ '$count' , '$totalCount' ] } } , else : { } } } , round2 : { $cond : { if : { $eq : [ '$_id.round' , 2 ] } , then : { totalCount : '$totalCount' , count : '$count' , percentage : { $divide : [ '$count' , '$totalCount' ] } } , else : { } } } , round3 : { $cond : { if : { $eq : [ '$_id.round' , 3 ] } , then : { totalCount : '$totalCount' , count : '$count' , percentage : { $divide : [ '$count' , '$totalCount' ] } } , else : { } } } } } , { $group : { _id : '$player' , round1 : { $mergeObjects : '$round1' } , round2 : { $mergeObjects : '$round2' } , round3 : { $mergeObjects : '$round3' } } } , { $project : { _id : 0 , id : '$_id' , combined : { totalCount : { $sum : [ '$round1.totalCount' , '$round2.totalCount' , '$round3.totalCount' ] } , count : { $sum : [ '$round1.count' , '$round2.count' , '$round3.count' ] } } , round1 : 1 , round2 : 1 , round3 : 1 } } , { $project : { id : 1 , year : { $literal : 2021 } , combined : { count : '$combined.count' , percentage : { $round : [ { $multiply : [ { $divide : [ '$combined.count' , '$combined.totalCount' ] } , 100 ] } , 1 ] } } , round1 : { count : { $ifNull : [ '$round1.count' , 0 ] } , percentage : { $round : [ { $multiply : [ { $ifNull : [ '$round1.percentage' , null ] } , 100 ] } , 1 ] } } , round2 : { count : { $ifNull : [ '$round2.count' , 0 ] } , percentage : { $round : [ { $multiply : [ { $ifNull : [ '$round2.percentage' , null ] } , 100 ] } , 1 ] } } , round3 : { count : { $ifNull : [ '$round3.count' , 0 ] } , percentage : { $round : [ { $multiply : [ { $ifNull : [ '$round3.percentage' , null ] } , 100 ] } , 1 ] } } } } , { $match : { id : { $ne : null } } } ] ; export const getMatchupsPipeline = ( match , key ) => [ { $match : match } , { $project : { _id : 0 , matches : { $map : { input : `$${ key }` , in : { /**
                         * We store an array here that we'll unwrap later in order to split
                         * a single match into two documents (one for each player).
                         */ players : [ { player : { $arrayElemAt : [ '$$this' , 0 ] } , opponent : { $arrayElemAt : [ '$$this' , 1 ] } } , { player : { $arrayElemAt : [ '$$this' , 1 ] } , opponent : { $arrayElemAt : [ '$$this' , 0 ] } } ] , winner : { $arrayElemAt : [ '$$this' , 2 ] } } } } } } , { $unwind : '$matches' } , { $unwind : '$matches.players' } , { $project : { player : '$matches.players.player' , opponent : '$matches.players.opponent' , hasWon : { $cond : { if : { $eq : [ '$matches.players.player' , '$matches.winner' ] } , then : 1 , else : 0 } } } } , { $group : { _id : { player : '$player' , opponent : '$opponent' } , totalCount : { $sum : 1 } , count : { $sum : '$hasWon' } } } , { $project : { _id : 0 , player : '$_id.player' , opponent : '$_id.opponent' , count : '$count' , percentage : { $round : [ { $multiply : [ { $divide : [ '$count' , '$totalCount' ] } , 100 ] } , 1 ] } } } , { $sort : { percentage : - 1 } } , { $match : { player : { $ne : null } , opponent : { $ne : null } } } , { $group : { _id : '$player' , matchups : { $push : { id : '$opponent' , count : '$count' , percentage : '$percentage' } } } } , { $project : { _id : 0 , id : '$_id' , matchups : 1 , year : { $literal : 2021 } } } , { $match : { id : { $ne : null } } } , { $sort : { id : 1 } } ] ;