Oelmounkad
Oelmounkad

Reputation: 113

Mongoose 'populate()' not populating

So Im building a simple application with the MEARN stack.

The problem is that i want to have the user's information (name,email, etc...) to be put in the 'user' property in the product , and it's not working (Postman request return 500 status Server error) , i don't know what i'm doing wrong , thanks in advance! my code snippets :

My User Model :

const mongoose = require('mongoose')

const UserSchema = mongoose.Schema({

    name : {
        type: String,
        required: true
    },
    email : {
        type: String,
        required: true,
        unique: true
    },
    password : {
        type: String,
        required: true
    },
    date : {
        type: Date,
        default: Date.now
    },
})

module.exports = mongoose.model('user',UserSchema)

my Product Model :

const mongoose = require('mongoose')

const ProductSchema = mongoose.Schema({

    user:{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'users'
    },
    name : {
        type: String,
        required: true
    },
    description : {
        type: String,
        required: true
    },
    quantity : {
        type: Number,
        required: true
    },
    price : {
        type: Number,
        required: true
    },
    date : {
        type: Date,
        default: Date.now
    },
})

module.exports = mongoose.model('product',ProductSchema)

and my request :

router.get('/:id', async (req,res) => {
     try {
          const product = await Product.findById(req.params.id).populate('user')
          res.json(product)
     } catch (err) {
          res.status(500).send('Server Error')
     } 
 })

Upvotes: 1

Views: 176

Answers (2)

JohnnyHK
JohnnyHK

Reputation: 312115

Your ref value needs to match the name of the model user references. So you need to change it to:

user:{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user'
},

Upvotes: 2

prax
prax

Reputation: 286

You have to specify the path:populate({path:'user'}) Try :

router.get('/:id', async (req,res) => {
     try {
          const product = await Product.findById(req.params.id).populate({path:'user'})
          res.json(product)
     } catch (err) {
          res.status(500).send('Server Error')
     } 
 })

Upvotes: 0

Related Questions