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

99
Vistas
Aplicando group by en pipeline de agregado con 2 documentos coincidentes

Necesito aplicar group by en un campo llamado material y sum aggregator en raiseGrnQuantity. Tanto este material como raiseGrnQuantity están en una matriz poDetails. He construido una tubería de agregación para dar una idea aproximada de lo que realmente estoy tratando de hacer:

 var projectQry = [ { "$unwind": { path : '$poDetails', preserveNullAndEmptyArrays: true } }, { $match: { "trackNo": campaignId, "vendorNo": vendorNo, "poDetails.material": output[i].materialCode, "status": "Pending" } }, { $project: { "poDetails.raisedGrnQuantity": 1, "poDetails.material": 1 } } ];

El resultado de esta canalización de agregación es:

 [ { _id: 62de2e7f1ad8470012b9dc75, poDetails: { material: '300000114', raisedGrnQuantity: '20' } }, { _id: 62de30ea1ad8470012b9dc78, poDetails: { material: '300000114', raisedGrnQuantity: '15' } } ] [ { _id: 62de2e7f1ad8470012b9dc75, poDetails: { material: '910000029', raisedGrnQuantity: '10' } }, { _id: 62de30ea1ad8470012b9dc78, poDetails: { material: '910000029', raisedGrnQuantity: '5' } } ]

Si nos damos cuenta, hay dos matrices diferentes en la salida porque tengo dos documentos coincidentes diferentes en la base de datos.

Ahora, lo que quiero hacer exactamente es aplicar el grupo por en el material y la agregación de la suma en raiseGrnQuantity para que tenga un resultado como el siguiente:

 { raisedGrnQuantity: '35' material: '300000114' }, { raisedGrnQuantity: '15' material: '910000029' }

Intenté usar el siguiente grupo en la canalización, pero no está dando el resultado correcto. En lugar de la suma de raiseGrnQuantity, muestra 0.

 $group: { _id: "$poDetails.material", raisedGrnQuantity: { $sum: "$poDetails.raisedGrnQuantity" } }

Sospecho que el problema se debe a dos documentos coincidentes que hacen que la salida sea dos matrices diferentes.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema que tiene es que el tipo de "podDetail.raisedGrnQuantity" es una cadena, por lo que $sum lo ignora.

Todo lo que necesita hacer es convertirlo en un número usando $toInt , así:

 { $group: { _id: "$poDetails.material", raisedGrnQuantity: { $sum: { "$toInt": "$poDetails.raisedGrnQuantity" } } } }

Parque infantil Mongo

about 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