猫鼬私人设置字段

时间:2019-03-28 01:22:38

标签: node.js mongoose

比方说我有这个模式:

const izzy = User.create({ name: 'Izzy', createdAt: "2000-01-28T01:04:30.809Z" });

我想避免有人不小心这样做:

createdAt

我想确保忽略default,因此,如果这是一个正在创建的新对象(如我的示例代码),则将使用createdAt值,但是如果是更新,{ {1}}应该保留其原始值。因此,我想以某种方式将createdAt配置为不可显式设置。

这可能吗?

2 个答案:

答案 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);