猫鼬'populate()'未填充

时间:2020-07-29 17:13:05

标签: mongodb express mongoose mongoose-populate

因此,我用MEARN堆栈构建了一个简单的应用程序。

问题是我希望将用户信息(姓名,电子邮件等)放置在产品的“用户”属性中,并且无法正常工作(邮递员请求返回500状态服务器错误) ,我不知道自己在做什么错,谢谢!我的代码段:

我的用户模型:

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)

我的产品型号:

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)

和我的要求:

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')
     } 
 })

2 个答案:

答案 0 :(得分:2)

您的ref值需要与模型user引用的名称匹配。因此,您需要将其更改为:

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

答案 1 :(得分:0)

您必须指定路径:populate({path:'user'})尝试:

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')
     } 
 })