猫鼬虚拟 return 空

Mongoose virtual return null

我有一个 Person 模式:

const person = new mongoose.Schema({
    name: String,
    birthday: Date,
    sex: String
},
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

person.virtual('tasks', {
    ref: 'task',
    localField: '_id',
    foreignField: 'person'
});

export default mongoose.model('person', person);

还有一个具有 person 字段的任务:

const schema = new mongoose.Schema({

    person: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'person',
        required: true
    },

    name: String
});

export default mongoose.model('task', schema);

还有我的API找回一个人:

api.get('/person/:id', async (req, res) => {
    let personID = req.params.id;

    if (personID) {
        let person = await Person.findById(personID);

        if (person)
            res.json(person);
        else
            res.status(404).end();
    }
    else {
        res.status(400).end();
    }
});

当我查询一个人的 API 时,tasks 总是 null,知道为什么吗?

谢谢

更新

我试过:

let person = await Person.findById(personID).populate('tasks').exec();

它还在返回 null

Use populate in your query.

能否检查以下查询之一

let person = await Person.findOne({ _id: personID })
  .populate('tasks')
  .exec((error, personData)
    => personData);

let person = await Person.findById(personID)
  .populate('tasks')
  .exec((error, personData) => personData);

reference Link : http://thecodebarbarian.com/mongoose-virtual-populate

好的,我发现了问题,我在设置虚拟之前注册了模型(在我围绕 mongoose.Schema 编写的一些包装器中)。