Выбор и заполнение не работают вместе Mongodb

#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 из него.

Я надеюсь, что это поможет вам.