node.js - 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
为不可显式设置。
这可能吗?
解决方案
您可以在钩子中标记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);
推荐阅读
- google-chrome - 如何显示音量滑块?
- c# - 如何从块中访问局部变量
- ios - 从字典数组映射到 Swift 中的数字数组
- php - 在外部 API 调用上将 PhpStorm 连接到 Xdebug
- c# - 实体框架 CodeFirst Sql 脚本生成
- xaml - 无法加载文件或程序集 'LibGit2Sharp.GitServer, Version=14.0.0.0, Culture=neutral, PublicKeyToken=xx' 或其依赖项之一
- c# - Geolocator PositionChanged 事件未触发以获取当前位置
- alteryx - 使用 Alteryx 工作流中的参数
- kubernetes - GCP:Kubernetes引擎可分配资源
- c# - 使用 ApplicationUser 从另一个表中获取值始终为空