我有一个使用Express,MongoDB和Mongoose的应用程序。
我有三个模型-User
,Clinic
和Participant
。
每个Clinic
都有与该特定诊所相关的User
列表。
制作新的Participant
时,它们将与Clinic
关联。
例如:
Clinic.js
const mongoose = require('mongoose');
const ClinicSchema = new mongoose.Schema({
members: [
{
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'users',
required: true
},
role: {
type: String,
required: true
}
}
],
name: {
type: String,
required: true
}
});
module.exports = Clinic = mongoose.model('clinics', ClinicSchema);
Participant.js
const mongoose = require('mongoose');
const ParticipantSchema = new mongoose.Schema({
clinic: {
type: mongoose.Schema.Types.ObjectId,
ref: 'clinics'
},
name: {
type: String,
required: true
}
});
module.exports = Participant= mongoose.model('participants', ParticipantSchema);
在我的一条路线中,我要返回一个特定的参与者,并且我想在该参与者上填充整个“诊所”字段-包括“成员”数组。至少,我只需要members数组中每个项目的用户ID。
我所拥有的代码正在按预期填充'clinic'字段,但是'members'数组将以members: [ [Object] ]
的形式返回
routes.js
router.get(
'/api/participants/:participantID',
passport.authenticate('jwt',{session: false}),
(req, res) => {
Participant.findById(req.params.participantID)
.populate({path: 'clinic', select: 'members'})
.then(patient => {
console.log(patient)
});
}
);
我需要在上述路由中进行哪些修改,以使猫鼬填充嵌套的members
数组?
猫鼬似乎不允许使用点语法的path
变量,例如.populate({path: 'clinic.members'})
不起作用,并且以菊花链方式将.populate({path: 'members'})
链接到初始.populate()
上也可以。
根据this question的答案提供者,我尝试了以下操作:
router.get(
'/api/participants/:participantID',
passport.authenticate('jwt',{session: false}),
(req, res) => {
Participant.findById(req.params.participantID)
.populate({
path: 'clinic',
select: 'members'
populate: {path: 'members'} // added this code
})
.then(patient => {
console.log(patient)
});
}
);
但是,当数据库中记录了3个条目时,这将返回一个空数组。
如果我将model: 'User'
包含在链接问题答案中建议的第二个填充数组中,则会抛出MissingSchemaError: Schema hasn't been registered for model "User".