定义新的Mongoose模式时,是否可以通过“不可修改的”设置(例如类型,必需等)来设置字段?这意味着一旦创建了新文档,就不能更改该字段。
例如,如下所示:
var userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unmodifiable: true
}
})
Run Code Online (Sandbox Code Playgroud)
从Mongoose的5.6.0版本开始,我们可以immutable: true在模式中使用(正像前面提到的关于mongoose-immutable包的回答)。典型的用例是用于时间戳记,但是在您的情况下,username它像这样:
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
immutable: true
}
});
Run Code Online (Sandbox Code Playgroud)
如果您尝试更新该字段,则猫鼬将忽略修改。
比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
}
});
Run Code Online (Sandbox Code Playgroud)
来源:Mongoose 5.6.0中的新增功能:不可变的属性和Mongoose 5.7中的新增功能:条件不可变,更快的文档数组。
小智 0
您可以使用Mongoose Immutable。这是一个小软件包,您可以使用下面的命令安装,它允许您使用“不可变”属性。
npm install mongoose-immutable --save
Run Code Online (Sandbox Code Playgroud)
然后使用它:
var userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
immutable: true
}
});
userSchema.plugin(immutablePlugin);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |