我已按如下方式构建架构:
const UserInfoSchema = new Schema({
email: { type: String, required: true, unique: true },
username: { type: String, required: true, unique: true },
userId: { type: Schema.Types.ObjectId, ref: 'User'},
displayName: { type: String, required: true },
profilePic: {
filename: {type: String},
url: {type: String}
},
created_at: Date,
updated_at: Date
})
我需要的是,一旦保存了电子邮件,用户名和userId等字段,就不应该修改。对于这种功能,有没有预先制作mongoose的东西?
我已经对schema.pre('update', (next) => {})
做了一些研究,但没有真正有用/不知道是否可以使用上述功能。非常感谢任何有关此事的帮助。提前谢谢。
答案 0 :(得分:3)
有一种更简单的方法 保存架构时,您可以将字段设置为不可变,例如
const UserInfoSchema = new Schema({
email: { type: String, required: true, unique: true, immutable:true },
username: { type: String, required: true, unique: true, immutable:true },
userId: { type: Schema.Types.ObjectId, ref: 'User', immutable:true},
displayName: { type: String, required: true },
profilePic: {
filename: {type: String},
url: {type: String}
},
created_at: Date,
updated_at: Date
})
它不会引发任何错误,如果需要,您应该在其他地方进行检查,但是当您尝试修改不可变字段时,它根本不会被更改
答案 1 :(得分:0)
for(const key in userUpdates) {
switch(key) {
case 'username':
case 'email':
throw new Error('These field/s cannot be changed anymore');
}
}
User.findByIdAndUpdate(id, userUpdates, { new: true, runValidators: true });