我有一个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
。
答案 0 :(得分:2)
在查询中使用
populate
。
能否请您检查以下查询之一
let person = await Person.findOne({ _id: personID })
.populate('tasks')
.exec((error, personData)
=> personData);
OR
let person = await Person.findById(personID)
.populate('tasks')
.exec((error, personData) => personData);
答案 1 :(得分:0)
好,我发现了问题,我在设置虚拟机之前正在注册模型(在我围绕mongoose.Schema编写的一些包装器中)。