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

259
Views
Contando el valor de los subdocumentos en la subconsulta mongoose

Tengo una colección de documentos que se ven así:

 [ { group_id: 1, value: 'foo' }, { group_id: 1, value: 'bar' }, { group_id: 1, value: 'bar' }, { group_id: 1, value: 'bar' }, { group_id: 2, value: 'bar' }, { group_id: 2, value: 'foo' }, { group_id: 2, value: 'foo' }, { group_id: 2, value: 'foo' } ]

Para cada group_id , quiero devolver el valor que ocurre más. Así que mi salida debería ser algo como esto...

 [ { group_id: 1, maxValue: 'bar', maxValueCount: 3 }, { group_id: 2, maxValue: 'foo', maxValueCount: 3 } ]

¿Cómo harías esto usando la función agregada Mongoose?

Actualización: esto es todo lo que he conseguido, solo necesito devolver el valor del conteo máximo ahora...

 const records = await Record.aggregate([ { $group: { _id: { id: '$group_id', value: '$value' }, count: { $sum: 1 } } } ])
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Usted puede lograr su objetivo por

  • agrupar por group_id/value (y contar las apariciones de value)
  • luego agrupar por group_id y empujar todos los valores encontrados dentro con su conteo
  • finalmente manteniendo de la matriz el valor que tiene el conteo máximo
 data=[ { group_id: 1, value: 'foo' }, { group_id: 1, value: 'bar' }, { group_id: 1, value: 'bar' }, { group_id: 1, value: 'bar' }, { group_id: 1, value: 'bar' },//one more added { group_id: 2, value: 'bar' }, { group_id: 2, value: 'foo' }, { group_id: 2, value: 'foo' }, { group_id: 2, value: 'foo' } ] db.products.remove({}) db.products.insert(data) const stages = [ { $group: { _id: { group_id: '$group_id', value: '$value' }, n: { $sum: 1 } } }, { $group: { _id: '$_id.group_id', values: { $push: { value: '$_id.value', n: '$n' } } } }, { $project: { group_id:1, best: { $reduce: { input: '$values', initialValue: { n: 0, value: ''}, in: { $cond: [ { $lt: ['$$value.n', '$$this.n'] }, '$$this', '$$value' ] } } } }, }, { $project: { group_id: 1, value: '$best.value', maxValue: '$best.n' } } ] printjson(db.products.aggregate(stages).toArray())

patio de recreo

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!