我正在尝试填充menteeList.userRecord
,仅选择名称和个人资料。但是也会填充配置文件。但是,如果我执行以下操作:
Profile.findOne({ user: req.user._id }).populate({
path: 'menteeList.userRecord',
populate: { path: 'name profile',
select:'name profile',
populate: { path: 'profile_picture' }, select:
'profile_picture' }
})
它只会显示名称,并且只会显示配置文件ID "profile": "5c9ae48eedd2dd561c09083c"
如果我这样做:
Profile.findOne({ user: req.user._id }).populate({path: 'menteeList.userRecord',populate: { path: 'profile_picture' },
select: 'profile_picture' }})
然后它将毫无问题地填充所有字段,但是我试图选择名称和填充的配置文件(我只是使用此示例说明路径定义正确)
当前获取的个人资料文档中的MenteeList定义
menteeList: [
{
name: { type: String, required: true },
avatar: { type: String, required: true },
userRecord: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}
]
用户架构中的配置文件定义
name: {
type: String,
required: true
},
profile: {
type: Schema.Types.ObjectId,
ref: 'Profile'
},
答案 0 :(得分:0)
从您的第二个查询的引用来看,我认为您的第一个查询是错误的
尝试一下:
Profile
.findOne({ user: req.user._id })
.populate({
path: 'menteeList.userRecord',
select:'name profile profile_picture',
populate: {
path: 'profile_picture',
select: 'profile_picture'
}
})
这将告诉mongodb
填充userRecord
,并仅选择name
,profile
和profile_picture
(因为我们需要填充profile_picture
同样,我们也需要将其包含在select
中。
接下来,我们可以填充profile_picture
并从中选择profile_picture
。
希望这对您有所帮助。