node.js - 使用 Mongoose Schema 防止字段修改
问题描述
当你定义一个新的 Mongoose Schema 时,有没有办法设置一个“不可修改”设置的字段(例如类型、必需等)?这意味着一旦创建了新文档,就无法更改此字段。
例如,像这样:
var userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unmodifiable: true
}
})
解决方案
从 Mongoose 的 5.6.0 版本开始,我们可以immutable: true
在模式中使用(正如前面提到的关于mongoose-immutable
包的答案)。典型的用例是时间戳,但在你的情况下,username
它是这样的:
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
immutable: true
}
});
如果您尝试更新该字段,Mongoose 将忽略修改。
比 OP 要求的更进一步,现在有了 Mongoose 5.7.0,我们可以有条件地设置immutable
属性。
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
immutable: doc => doc.role !== 'ADMIN'
},
role: {
type: String,
default: 'USER',
enum: ['USER', 'MODERATOR', 'ADMIN'],
immutable: true
}
});
资料来源:Mongoose 5.6.0 中的新功能:不可变属性和Mongoose 5.7 中的新功能:条件不变性,更快的文档数组。
推荐阅读
- amazon-web-services - AWS SAM 在 API Gateway 中指定方法请求
- docker - 可以通过启动 docker 时传递的环境变量配置 kafka 连接器吗?或者 curl 是唯一的方法?
- reactjs - React & react-native monorepo:node_module 导入问题
- java - 如何从json中提取所有变量名?
- javascript - 在 Vuetify.js 中更改输入文件组件的颜色和图标
- git - TFS-git 单一存储库可以有两个不同的解决方案文件?
- javascript - 如何在全日历js中只显示一个上午和下午时间
- python - Charlieplexing 按钮提供额外的输出
- python - 将具有 0 的行替换为列的均值/
- javascript - 循环数:将一个数字除以另一个数字时如何获得一个非四舍五入的循环数?