mongoose:禁止更新特定字段

eag*_*gor 5 mongoose mongodb node.js

var post = mongoose.Schema({
    ...
    _createdOn: Date
});
Run Code Online (Sandbox Code Playgroud)

我想_createdOn仅允许在创建文档时设置字段,并禁止在将来的更新中更改它.它是如何在Mongoose中完成的?

eag*_*gor 13

我通过_createdOn在模式的预保存挂钩中设置(仅在第一次保存时)来实现此效果:

schema.pre('save', function (next) {
    if (!this._createdOn) {
        this._createdOn = new Date();
    }
    next();
});
Run Code Online (Sandbox Code Playgroud)

......并禁止其他任何地方的变化:

userSchema.pre('validate', function (next) {
    if (this.isModified('_createdOn')) {
        this.invalidate('_createdOn');
    }
    next();
});
Run Code Online (Sandbox Code Playgroud)