我有2个模式,一个用于问题,另一个用于主题
这是一对多的关系,其中theme_id引用了主题的ID
效果很好,但是我尝试使用填充来从id中获取主题信息,这实际上什么也没做
我正在制作一个API,因此当我用问题的相应ID击中/ questions /:id时,什么都没有发生Postman只是冻结,服务器什么也不做
这是问题模式:
const questionSchema = mongoose.Schema({
question: {
type: String,
required: true,
index: { unique: true }
},
answers: [{
name: String,
is_true: Boolean
}],
theme_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'themes'
}
});
const Question = module.exports = mongoose.model('Question', questionSchema);
这是主题架构:
const themeSchema = mongoose.Schema({
name: {
type: String,
required: true,
index: { unique: true }
},
relation: {
type: String,
required: true
}
});
const Theme = module.exports = mongoose.model('Theme', themeSchema);
这是我获取问题的方法:
exports.getQuestion = (req, res, next) => {
Question.findById(req.params.id)
.populate('theme_id')
.exec((err, question) => {
if(err) return err;
console.log(question);
res.json(question);
})
}
当我这样做
populate('theme_id')
如上所述没有任何反应
当我这样做
populate('theme') //or any other string, it doesn't matter
我从MongoDB中获取theme_id字段,但没有填充,它只是主题的ID
现在被困在这里一段时间了,我在做什么错了?
答案 0 :(得分:0)
我认为您的ObjectId
参考中存在错误。
将theme_id
引用更改为
theme_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Theme'
}
然后
populate('theme_id')
阅读更多内容
答案 1 :(得分:0)
猫鼬使用ref:"ModelName"
const questionSchema = mongoose.Schema({
...
theme_id: { //<-- use this key in populate
type: mongoose.Schema.Types.ObjectId,
ref: 'Theme' // <-- model name here
}
});
const Question = module.exports = mongoose.model('Question', questionSchema);
并使用populate('field_name')
在您的情况下:populate('theme_id')