猫鼬'populate()'没有填充

Posted

技术标签:

【中文标题】猫鼬\'populate()\'没有填充【英文标题】:Mongoose 'populate()' not populating猫鼬'populate()'没有填充 【发布时间】:2020-11-19 08:38:29 【问题描述】:

所以我用 MEARN 堆栈构建了一个简单的应用程序。

问题是我想将用户信息(姓名、电子邮件等)放在产品的“用户”属性中,但它不起作用(邮递员请求返回 500 状态服务器错误) ,我不知道我在做什么错,提前谢谢!我的代码 sn-ps:

我的用户模型:

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

【问题讨论】:

err 值应该告诉您问题出在哪里,但我猜您在ref 中使用了错误的型号名称。应该是ref: 'user' @JohnnyHK 非常感谢!这就是问题的根源。 :) 【参考方案1】:

您的ref 值需要与模型名称user 引用相匹配。所以你需要把它改成:

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

【讨论】:

【参考方案2】:

你要指定路径: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')
      
 )

【讨论】:

服务器错误,来自trycatch中的catch bloc

以上是关于猫鼬'populate()'没有填充的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬 document.populate() 不工作

如何填充新创建的猫鼬文档?

猫鼬'填充'不填充

猫鼬填充功能不填充

猫鼬填充两个简单的模式

反向填充猫鼬