Mongoose .populate() 返回一个空数组
Mongoose .populate() returning an empty array
对不起,我知道有很多问题问同样的事情,但我找不到任何答案可以解决我的问题!
我正在尝试使用 mongoose 填充函数来填充模式的 ID,但它只是 returns 一个空数组。如果我不使用填充函数,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},
description: {type: String, maxLength: 300},
season: [{type: Schema.Types.ObjectId, ref: 'Season', required: true}],
price: {type: Number, min: 0, max: 9.99, required: true},
stock: {type: Number, min: 0, 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});
});
};
感谢您的帮助。我已经无计可施了。
.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
方法并异步调用它:await this.fruit_detail(req, res, next)
海量手掌表情符号。
问题是引用的季节 ID 来自不存在的季节。我在填充数据库时以某种方式复制了一些,然后删除了错误的。感觉浪费了我生命中的两天,但至少已经解决了!
对不起,我知道有很多问题问同样的事情,但我找不到任何答案可以解决我的问题!
我正在尝试使用 mongoose 填充函数来填充模式的 ID,但它只是 returns 一个空数组。如果我不使用填充函数,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},
description: {type: String, maxLength: 300},
season: [{type: Schema.Types.ObjectId, ref: 'Season', required: true}],
price: {type: Number, min: 0, max: 9.99, required: true},
stock: {type: Number, min: 0, 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});
});
};
感谢您的帮助。我已经无计可施了。
.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
方法并异步调用它:await this.fruit_detail(req, res, next)
海量手掌表情符号。
问题是引用的季节 ID 来自不存在的季节。我在填充数据库时以某种方式复制了一些,然后删除了错误的。感觉浪费了我生命中的两天,但至少已经解决了!