Tengo una colección de este tipo con algunos partidos de la Premier League:
{"HomeTeam": "Chelsea", "HTScore": 2, "FTR": 'D', "AwayTeam": "Everton", "ATScore":2}, {"HomeTeam": "Chelsea", "HTScore": 3, "FTR": 'H', "AwayTeam": "Wolves", "ATScore":1}, {"HomeTeam": "Chelsea", "HTScore": 2, "FTR": 'D', "AwayTeam": "Everton", "ATScore":2}, ..... {"HomeTeam": "Liverpool", "HTScore": 1, "FTR": 'A', "AwayTeam": "Aston Villa", "ATScore":3} {"HomeTeam": "Liverpool", "HTScore": 6, "FTR": 'H', "AwayTeam": "Chelsea", "ATScore":3} etc. donde HomeTeam y AwayTeam representan a ambos equipos del partido, HTScore representa la puntuación de HomeTeam, ATScore representa la puntuación de AwayTeam y FTR representa el resultado de tiempo completo ('A': AwayTeam wins, 'D': Draw, 'H' : Home team wins)
Quiero crear una tabla de este tipo, que en el ejemplo anterior sería así
HomeTeam | Number of Victories | Number of Draws | Number of Defeats | Max Goals scored in a Match --------------------------------------------------------------------------------------- Chelsea | 1 | 2 | 0 | 3 --------------------------------------------------------------------------------------- Liverpool | 1 | 0 | 1 | 6¿Hay alguna forma de crear esos campos automáticamente iterando sobre los valores de FTR? Muchas gracias por adelantado
Puede usar una canalización de agregación y $group de esta manera:
$group para obtener los equipos locales con sus datos. Aquí, para cada uno se añade un nuevo campo llamado result donde se almacena el resultado final y otro llamado goals con el número de goles marcados.$filter .$project para obtener los valores que desea. En este caso, el size de las matrices y el valor max de los goles marcados. db.collection.aggregate([ { "$group": { "_id": "$HomeTeam", "result": { "$push": "$FTR" }, "goals": { "$push": "$HTScore" } } }, { "$set": { "draws": { "$filter": { "input": "$result", "as": "d", "cond": {"$eq": ["$$d","D"]} } }, "wins": { "$filter": { "input": "$result", "as": "w", "cond": {"$eq": ["$$w","H"]} } }, "defeat": { "$filter": { "input": "$result", "as": "a", "cond": {"$eq": ["$$a","A"]} } } } }, { "$project": { "HomeTeam": "$_id", "Number_of_victories": {"$size": "$wins"}, "Number_of_draws": {"$size": "$draws"}, "Number_of_defeats": {"$size": "$defeat"}, "Max_goals": {"$max": "$goals"} } } ])Ejemplo aquí