Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda