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

448
Views
Múltiples consultas asíncronas en nodejs (mongoose)

Soy un novato de nodejs. Tengo dos modelos simples, Usuario e Historia. Esto es lo que quiero hacer:

  • Quiero recuperar todas las historias que tienen {status:"public"} y almacenarlas en una matriz llamada retrievedStories.
  • Luego, para cada historia, quiero usar su campo "usuario" (que contiene la identificación del objeto del usuario) para buscar el nombre del usuario en Usuario
  • Luego agregue una nueva clave en cada elemento de las historias recuperadas llamada nombre del autor con el nombre del usuario.

Aquí están los modelos:

 const UserSchema = new mongoose.Schema({ googleId: { type: String, required: true }, displayName: { type: String, required: true }, firstName: { type: String, required: true }, lastName: { type: String, required: true }, image: { type: String, }, createdAt: { type:Date, default: Date.now() } }) const StorySchema = new mongoose.Schema({ title: { type: String, required: true, trim: true }, body: { type: String, required: true }, status: { type: String, default: 'public', enum: ['public', 'private'] }, user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, createdAt: { type:Date, default: Date.now() } })

Y esto es lo que probé, pero no funciona. Las historias se recuperan pero el nombre del autor no se agrega. ¡Cualquier ayuda (¿posiblemente una mejor manera de hacer esto?) será muy apreciada!

 router.get('/',async (req,res)=>{ try { const retrievedStories = await Story.find( {status: "public"} ) await Promise.all(retrievedStories.map(async (story) =>{ const author = await User.findById(story.user) story.authorName = author.displayName })) return res.json(retrievedStories) } catch (error) { console.log(error) } })

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

0

Puede simplificar su consulta utilizando populate para recuperar los datos del User :

 router.get('/', async (req, res) => { try { const retrievedStories = await Story.find({ status: 'public' }) .populate('user') .exec(); return res.json(retrievedStories); } catch (error) { console.log(error); } });

A continuación, puede acceder a los datos de displayName del User en cada Story accediendo a story.user.displayName .
Para obtener más información sobre el llenado de consultas, consulte los documentos oficiales.

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!