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

352
Vistas
¿Cómo agrupar dos elementos usando Mongoose?

Necesito crear una consulta usando mongoose, que me permite usar el grupo, para contar los elementos que están en el estado INICIADO o NO INICIADO, y luego devolver el conteo de los elementos que están en cada uno de los estados.

Este es el objeto json con el que estoy trabajando.

 [ { status: "INITIATED", _id: "6057e0013a3dec1d44a7d152", group: "dairy", location: "001", total_items: 30, __v: 0 }, { status: "INITIATED", _id: "6057e0013a3dec1d44a7d153", group: "dairy", location: "002", total_items: 45, __v: 0 }, { status: "INITIATED", _id: "6057e0013a3dec1d44a7d154", group: "dairy", location: "003", total_items: 12, __v: 0 }, { status: "NOT INITIATED", _id: "6057e0013a3dec1d44a7d155", group: "dairy", location: "004", total_items: 50, __v: 0 }, { status: "NOT INITIATED", _id: "6057e0013a3dec1d44a7d156", group: "drugs", location: "005", total_items: 23, __v: 0 }, { status: "NOT INITIATED", _id: "6057e0013a3dec1d44a7d157", group: "drugs", location: "006", total_items: 76, __v: 0 }]

Por ejemplo, del grupo de lácteos necesito devolver un json con la siguiente estructura.

 { 'id': null, 'group': 'dairy', 'INITIATED': 3, 'NO INITIATED': 1 }

Debido al grupo lácteo, 3 de los elementos están en estado INICIADO y uno de los elementos está en estado NO INICIADO. Otro ejemplo sería con el grupo de medicamentos que deberían devolver el siguiente json.

 { 'id': null, 'group': 'medications', 'STARTED': 0, 'NOT INITIATED': 2 }

Para hacer esto, estoy tratando de hacer que funcione el siguiente código.

 db.collection.aggregate ([ { "$ group": { _id: { source: "$ group", status: "$ status" }, count: { $ sum: 1 } } } ])

Pero no tengo muy claro cómo usar el grupo para generar la respuesta como la necesito.

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

0

Ok, esto fue más complicado de lo que pensé al principio, pero así es como podrías hacerlo:

Primero, agrupe sus documentos por campo de grupo y sume los recuentos para el campo de estado. Estoy usando los operadores $cond y $eq para asegurarme de que el estado coincida con el campo de conteo. Finalmente, aplica $project para obtener el resultado deseado sin el campo _id :

 db.collection.aggregate([ { "$group": { "_id": "$group", "NOT INITIATED": { "$sum": { "$cond": [ { "$eq": [ "$status", "NOT INITIATED" ] }, 1, 0] } }, "INITIATED": { "$sum": { "$cond": [ { "$eq": [ "$status", "INITIATED" ] }, 1, 0] } }, } }, { "$project": { "_id": 0, "group": "$_id", "INITIATED":1, "NOT INITIATED":1 } }])

He creado un ejemplo en mongoplayground para ti: https://mongoplayground.net/p/H-72VzWoeoN

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