Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!