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

196
Vistas
¿Cómo agrupar en un valor de campo que está dentro de una matriz en MongoDB?

Tengo un sistema de calificación de estudiantes que utiliza MongoDB. Tengo los siguientes documentos en MongoDB:

¿Cómo obtengo el número de estudiantes que obtuvieron grade "A","B","C","D" para una subject en particular? El "_id" para cada sujeto sigue siendo el mismo.

 { _id: "60b223541338467beaf3ae0d", studentName: "John Doe" studentGradingDetails: [ { _id: "60b21e47e5462929cab27a98", term: "semester-1", subject: "chemistry", grade: "A", createdAt: "2021-05-29T10:58:15.113Z", }, { _id: "60b21e47e5462929cab27a99", term: "semester-2", subject: "computer_science", grade: "B", createdAt: "2021-05-29T10:58:15.113Z", }, ], createdAt: "2021-05-29T11:19:48.770Z", } { _id: "60b223541338467beaf3ae0e", studentName: "Will Smith" studentGradingDetails: [ { _id: "60b21e47e5462929cab27a98", term: "semester-1", subject: "chemistry", grade: "D", createdAt: "2021-05-29T10:58:15.113Z", }, { _id: "60b21e47e5462929cab27a99", term: "semester-2", subject: "computer_science", grade: "A", createdAt: "2021-05-29T10:58:15.113Z", }, ], createdAt: "2021-05-29T11:19:48.770Z", }

Esto es lo que probé y me quedé, ¿no estoy seguro de cuáles son los siguientes pasos?

 await db.collection("studentsemestergrades") .aggregate([ { $unwind: "$studentGradingDetails" }, { $group: { _id: "$studentGradingDetails._id", }, }, ]) .toArray();

Rendimiento esperado:

Distribución de alumnos con diferentes notas en cada materia (_id )

 { "_id" : "60b21e47e5462929cab27a98", "A" : 12, "B" : 20, "C" : 8, "D" : 2 }, { "_id" : "60b21e47e5462929cab27a99", "A" : 5, "B" : 2, "C" : 8, "D" : 12 }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  • $unwind deconstruye la matriz studentGradingDetails
  • $group por _id y grade y obtener el recuento total
  • $group solo por _id y construir la matriz de pares clave-valor del objeto con grade y count
  • $arrayToObject convierte la matriz de par clave-valor anterior en objeto
  • $mergeObjects para fusionar el objeto convertido y el campo _id , puede agregar más campos si es necesario
  • $replaceRoot para reemplazar el objeto de combinación anterior a la raíz
 await db.collection("studentsemestergrades").aggregate([ { $unwind: "$studentGradingDetails" }, { $group: { _id: { _id: "$studentGradingDetails._id", grade: "$studentGradingDetails.grade" }, count: { $sum: 1 } } }, { $group: { _id: "$_id._id", grades: { $push: { k: "$_id.grade", v: "$count" } } } }, { $replaceRoot: { newRoot: { $mergeObjects: [ { _id: "$_id" }, { $arrayToObject: "$grades" } ] } } } ])

Patio de juegos

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