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

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

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