mongoose:我们可以将引用对象填充到别名/虚拟属性吗?

时间:2016-04-29 04:17:42

标签: mongoose mongoose-populate mongoose-schema

我正在寻找一种使用mongoose填充别名/虚拟财产的方法?

目前,mongoose的人口是为引用属性添加更多字段(通常是身份密钥)。 我想保留原始属性并将引用的数据填充到其他属性。

Ex:似乎我们需要更多关于架构的选项

profile_id: { type: mongoose.Schema.Types.ObjectId, ref: 'profiles', populateTo: 'profile' }

结果返回应包含两个属性:profile_idprofile

在搜索时间后,我在github上发现了这个问题:(https://github.com/Automattic/mongoose/issues/3225

1 个答案:

答案 0 :(得分:0)

。您可以使用虚拟属性填充参考对象。 您需要做的就是在架构上定义一个虚拟属性,如下所示:

UserSchema.virtual('profile', {   
    ref: 'Profiles', // the collection/model name
    localField: 'profile._id',
    foreignField: '_id',
    justOne: true, // default is false
});

然后使用填充方法:

User.
  find({}).
  populate({ path: 'profile', select: 'name status' }).

这将返回以下结果:

{   // USER
    _id: 'xx...1',
    username: 'alpesh',
    profile_id: 'xx......7',
    profile: {    // POPULATED
        name: 'Admin',
        status: 'Active
    }
}

请注意-如果您使用的是nodejs / express: 在定义架构时使用 {toJSON:{virtuals:true}}

引荐-https://mongoosejs.com/docs/populate.html