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

95
Vistas
MongoDB agregado para extraer valores de una matriz anidada y devolver un total

Tengo esta estructura de colección:

 [ "_id": "61a013b59f9dd0ebfd23ftgb", "modules": [ { "_id": "61a013b59f9dd0ebfd964dgh", "videos": [ { "_id": "213412", "progress": 100 }, { "_id": "61a013b59f9dd0ebfd965f4a", "progress": 0 }, ] }, { "_id": "43556hujferwdhgsdft", "videos": [ { "_id": "fdsg3sg98er989890", "progress": 66 }, { "_id": "fdsg3sg98er989890", "progress": 100 }, { "_id": "fdsg3sg98er989890", "progress": 100 } ] } ] ]

Estoy tratando de devolver el progreso general de cada "módulo" sumando todos los videos que tienen un progreso de 100 y creando un porcentaje basado en la cantidad de videos en el módulo. Por ejemplo, el primer módulo debe devolver "module_progess" de 50 dentro de él, ya que tiene 1/2 videos completados.

 { "_id": "61a013b59f9dd0ebfd964dgh", "module_progress": 50, "videos": [ { "_id": "213412", "progress": 100 }, { "_id": "61a013b59f9dd0ebfd965f4a", "progress": 0 }, ] },

¿Cómo accedo a cada objeto de videos para hacer este cálculo y agregar el nuevo campo a la respuesta?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

consulta1

  • mapa en módulos
  • y agregue un campo en cada uno con el progreso promedio de los videos

Código de prueba aquí

 aggregate( [{"$set": {"modules": {"$map": {"input": "$modules", "in": {"$mergeObjects": ["$$this", {"module_progress": {"$avg": {"$map": {"input": "$$this.videos.progress", "in": {"$cond": [{"$eq": ["$$progress", 100]}, "$$progress", 0]}, "as": "progress"}}}}]}}}}}])

consulta2

  • relajarse
  • reemplazar la raíz para mejorar la estructura
  • agregue el campo promedio

Código de prueba aquí

 aggregate( [{"$unwind": {"path": "$modules"}}, {"$replaceRoot": {"newRoot": "$modules"}}, {"$set": {"module_progress": {"$avg": {"$map": {"input": "$videos.progress", "in": {"$cond": [{"$eq": ["$$this", 100]}, "$$this", 0]}}}}}}])
about 4 years ago · Juan Pablo Isaza 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