我正在尝试使用 mongoose 在 MongoDB 中创建一个新对象。
这是我的猫鼬模式:
const UsersSchema = new Schema<BaseUser>(
{
email: {
type: Schema.Types.String,
index: true,
required: true,
unique: true,
},
someKey: {
type: Schema.Types.String,
default: null,
required: false,
enum: Object.values(SomeEnumObj),
}
},
{
timestamps: true,
}
);
enum SomeEnumObj = {
TEST = "TEST",
}
当我尝试使用以下命令创建新用户时:
model.create({
email: '[email protected]',
}).exec()
抛出以下错误:
users validation failed: someKey: `null` is not a valid enum value for path `someKey`.,
我可以通过设置解决这个问题:
enum: [...Object.values(SomeEnumObj), null]
但是我想知道是否有更好或更正确的方法来做到这一点,因为我的解决方案感觉有点老套,并且我希望如果我将默认值设置为 null,验证器将允许它为 null。
基于这个问题我也没有找到任何合适的解决方案,因为这也是我的问题。我相信不需要添加 null 作为 默认值
(default: null)
来解决问题。
只需将其添加到您的架构中:
Object.values(SomeEnumObj).concat([null])
您的架构:
...
someKey: {
type: Schema.Types.String,
enum: Object.values(SomeEnumObj).concat([null]),
}
...
更新
如
Mongoose@^8
迁移指南中所述,null
对于非必需的字符串枚举有效。
const schema = new Schema({
status: {
type: String,
enum: ['on', 'off']
}
});
const Test = mongoose.model('Test', schema);
// Works fine in Mongoose 8
// Throws a `ValidationError` in Mongoose 7
await Test.create({ status: null });
使用
undefined
而不是 null
对我有用:
someKey: {
type: String,
default: undefined,
required: false,
enum: SomeEnumObj,
}