猫鼬Populate()不返回任何内容,只是停留在卡住状态

时间:2019-09-10 01:06:53

标签: node.js mongodb express mongoose

我有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

现在被困在这里一段时间了,我在做什么错了?

2 个答案:

答案 0 :(得分:0)

我认为您的ObjectId参考中存在错误。

theme_id引用更改为

theme_id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Theme'
    }

然后

populate('theme_id')

您可以在Mongoose v5.6.13: Query Population

阅读更多内容

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