Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

195
Vistas
MongoDB.- Crea un campo para cada elemento de un arreglo

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

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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.
  • Luego establezca cuántas "D", "H" o "A" hay en los resultados, es decir, cuántas victorias, derrotas o empates usando $filter .
  • Y al menos use $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í

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda