问题描述
抱歉,我知道有很多问题都在问同样的问题,但我找不到任何可以为我解决问题的答案!
我正在尝试使用 mongoose populate 函数来填充架构的 ID,但它只返回一个空数组。如果我不使用 populate 函数,ID 就在数组中,但使用它似乎会删除它们。
我的路线和模型很简单,因为我只是想学习它,这更令人困惑为什么它是错误的!我以为我完全按照教程....
这些是我的架构:
var SeasonSchema = new Schema(
{
name: {type: String,required: true,enum: ['Spring','Summer','Autumn','Winter']},description: {type: String,maxLength: 300}
}
);
var FruitSchema = new Schema(
{
name: {type: String,required: [true,'All fruits have names.'],maxLength: 50},maxLength: 300},season: [{type: Schema.Types.ObjectId,ref: 'Season',required: true}],price: {type: Number,min: 0,max: 9.99,required: true},stock: {type: Number,max: 999,required: true}
}
);
这是我要开始工作的控制器:(只需填充 Fruit's Season 字段。
exports.fruit_detail = function(req,res,next) {
Fruit.findOne({name: req.params.name})
.populate('season')
.exec(function (err,fruit) {
if (err) {return next(err);}
if (fruit==null) {
var err = new Error('Fruit not found');
err.status = 404;
return next(err);
}
res.render('fruit_detail',{title: fruit.name,fruit: fruit});
});
};
感谢您的帮助。我已经无能为力了。
解决方法
ret
是一种异步方法,需要正确调用:
.populate()
然后您必须导入您的 exports.fruit_detail = async function(req,res,next) {
await Fruit.findOne({name: req.params.name})
.populate('season')
.execPopulate(function (err,fruit) {
if (err) {return next(err);}
if (fruit==null) {
var err = new Error('Fruit not found');
err.status = 404;
return next(err);
}
res.render('fruit_detail',{title: fruit.name,fruit: fruit});
});
};
方法并异步调用它:fruit_deail
巨大的手掌表情符号。
问题是所引用的季节 ID 来自不存在的季节。我在填充数据库时以某种方式进行了重复,并且我删除了错误的。感觉我浪费了两天的生命,但至少它是排序的!