Soy un novato de nodejs. Tengo dos modelos simples, Usuario e Historia. Esto es lo que quiero hacer:
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) } })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.