首页 > 解决方案 > Mongoose 私有集字段

问题描述

假设我有这个架构:

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    createdAt: {
        type: Date,
        default: Date.now
    }
});

mongoose.model('User', UserSchema);

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

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

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

这可能吗?

标签: node.jsmongoose

解决方案


您可以在钩子中标记createdAtimmutable并设置默认值。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);

推荐阅读