#mongodb #mongoose
#mongodb #mongoose
Вопрос:
Я пытаюсь заполнить 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' }
})
Он будет отображать только имя и просто идентификатор профиля "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'
},
Комментарии:
1. Можете ли вы показать мне схему своего профиля, я думаю, вы добавили
menteeList
иUser
схему, но пропустилиprofile
схему2. Добавьте всю схему:
Profile
,User
отдельно, сейчас это немного сбивает с толку
Ответ №1:
Судя по ссылке на ваш второй запрос, я думаю, что ваш первый запрос неверен,
Попробуйте это:
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
из него.
Я надеюсь, что это поможет вам.