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

76
Views
Obtenga una matriz plana de elementos profundamente anidados en MongoDB

Estoy construyendo un proyecto paralelo que usa una base de datos mongodb. Estoy usando la pila MERN para crear una aplicación web con mis datos. Estoy usando Mongoose para obtener datos de mi base de datos en un servidor NodeJS/Express para construir mi API REST. Aquí hay un ejemplo de los datos que tengo. Tengo subdocumentos profundamente anidados que necesito recuperar. Cada usuario tiene una matriz de 'contactos'. Cada 'contacto' tiene una serie de 'tareas'. Me gustaría obtener una matriz de todas las tareas anidadas en cada usuario. Por ejemplo, si un usuario tiene 2 contactos y cada contacto tiene 3 tareas, me gustaría una matriz con 6 tareas.

 { userName: 'jdoe', uid: 12343, contacts: [ { name: 'Jane Doe', tasks:[ { taskName: 'Task1' }, { taskName: 'Task2' }, { taskName: 'Task3' }, ] }, { name: 'Bob Smith', tasks:[ { taskName: 'TaskA' }, { taskName: 'TaskB' }, { taskName: 'TaskC' }, ] } ] }

Para consultar mis datos con Mongoose, probé algo como esto

 User.findOne({uid: req.params.uid}, 'contacts.tasks', (yasks,err)=>{ if(err){ res.send(err) }else{ res.send(tasks) } })

Sin embargo, esta consulta devuelve algo como esto

 { "_id": "353453", "contacts": [ { "tasks": [ { taskName: 'Task1' } ] }, { "tasks": [ { taskName: 'Task1' }, { taskName: 'Task1' } ] }, { "tasks": [] }, { "tasks": [] } ] }

estoy buscando una respuesta como esta

 [ { taskName: 'Task1' }, { taskName: 'Task1' }, taskName: 'Task1' }, { taskName: 'Task1' } ]

Me pregunto si hay alguna manera de que pueda hacer esto con Mongoose. Si no, ¿qué tipo de javascript puedo ejecutar para transformar mis datos para que estén estructurados de esta manera?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Puedes usar $reduce para esto:

 User.aggregate([ {$match: {uid: req.params.uid}}, { $project: { tasks: { $reduce: { input: "$contacts", initialValue: [], in: {$concatArrays: ["$$value", "$$this.tasks"]} } }, _id: 0 } } ])

Vea cómo funciona en el ejemplo del patio de recreo

about 4 years ago · Juan Pablo Isaza 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!