比方说我有这个模式:
const izzy = User.create({ name: 'Izzy', createdAt: "2000-01-28T01:04:30.809Z" });
我想避免有人不小心这样做:
createdAt
我想确保忽略default
,因此,如果这是一个正在创建的新对象(如我的示例代码),则将使用createdAt
值,但是如果是更新,{ {1}}应该保留其原始值。因此,我想以某种方式将createdAt
配置为不可显式设置。
这可能吗?
答案 0 :(得分:0)
通常,当您要使用默认值时,不会传递createdAt值。但是,由于您是在“偶然”说的话,您可以使用来覆盖值传递。
User.create({ name: 'Izzy', createdAt: "2000-01-28T01:04:30.809Z" } , (err,user)=>{
if(err){
//handle
}
user.createdAt = Date.now;
user.save();
});
答案 1 :(得分:0)
您可以将createdAt
标记为immutable
,并在pre('save')
挂钩中设置默认值。
const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
createdAt: {
type: Date,
immutabe: true
}
});
UserSchema.pre('save', function(next){
this.createAt = Date.now();
next();
});
mongoose.model('User', UserSchema);