在 Mongoose 中引用另一个模式的属性?
Posted
技术标签:
【中文标题】在 Mongoose 中引用另一个模式的属性?【英文标题】:Referencing another schema's property in Mongoose? 【发布时间】:2022-01-21 03:51:54 【问题描述】:考虑以下几点:
我有一个User
架构:
const UserSchema = new mongoose.Schema(
email:
type: String,
required: true,
trim: true,
lowercase: true,
index: unique: true ,
validate:
validator: emailValidator.validate,
message: props => `$props.value is not a valid email address!`
,
password:
type: String,
required: true,
trim: true,
index: unique: true ,
minlength: 7,
maxlength: 11
,
roles: [ type: 'String' ],
isVerified: type: Boolean, default: false ,
passwordResetToken: String,
resetPasswordExpires: Date
,
timestamps: true
);
export default mongoose.models.User || mongoose.model('User', UserSchema)
我有一个Profile
架构:
const ProfileSchema = new Schema(
name:
type: String,
,
email:
type: Schema.Types.ObjectId, ref: 'User',
,
password:
type: Schema.Types.ObjectId, ref: 'User',
,
interestedActivities:
type: String,
,
memerSince: type: Date, default: Date.now
)
export default mongoose.models.Profile || mongoose.model('Profile', ProfileSchema)
以上内容是否会自动使用来自用户的email
和Password
填充ProfileSchema
?
所以在我的route/api
例如/api/profile
例如,它会隐含地知道两者是链接的吗?
如果我这样做了:
从../../models/Profile
导入配置文件
handler
.use(auth)
.get((req, res) =>
Profile.findOne(
email: req.body.email
,
);
export default handler
它应该返回在用户中创建的电子邮件?
提前致谢!
【问题讨论】:
【参考方案1】:不,它不会自动填充e-mail
和password
。您也不能将电子邮件分配给reference
地点。如果您尝试这样做,您将获得Validation Error
。因为你刚刚定义为ObjectId
;
email:
type: Schema.Types.ObjectId, ref: 'User',
ref
返回userId
,您可以使用此userId
进行填充。像这样:
handler
.use(auth)
.get((req, res) =>
Profile.findOne(
userId: req.body.userId
,
).populate('userId').select('email password bla bla');
export default handler
【讨论】:
以上是关于在 Mongoose 中引用另一个模式的属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoose 中将一个模式的引用添加到另一个模式并通过 json 插入数据?