选择并填充不能一起使用Mongodb

时间:2019-03-27 04:45:10

标签: 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' }
                    })

它只会显示名称,并且只会显示配置文件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'
        },

1 个答案:

答案 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,并仅选择nameprofileprofile_picture(因为我们需要填充profile_picture同样,我们也需要将其包含在select中。

接下来,我们可以填充profile_picture并从中选择profile_picture

希望这对您有所帮助。