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 来自不存在的季节。我在填充数据库时以某种方式复制了一些,然后删除了错误的。感觉浪费了我生命中的两天,但至少已经解决了!