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

265
Vistas
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 Respuestas
Responde la pregunta

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 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