如何允许猫鼬模式中的枚举字段为空?

Mar*_* Sh 6 enums mongoose mongodb node.js typescript

我正在尝试使用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",
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下方法创建新用户时:

model.create({
 email: 'some@email.com',
}).exec()
Run Code Online (Sandbox Code Playgroud)

抛出以下错误:

users validation failed: someKey: `null` is not a valid enum value for path `someKey`., 
Run Code Online (Sandbox Code Playgroud)

我能够通过设置来解决这个问题:

users validation failed: someKey: `null` is not a valid enum value for path `someKey`., 
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有更好或更正确的方法来执行此操作,因为我的解决方案感觉有点笨拙,并且我希望如果我将默认值设置为 null,验证器将允许它为 null。

Ali*_*afi 6

基于这个问题我也没有找到任何合适的解决方案,因为这也是我的问题。我相信不需要添加 null 作为默认值 (default: null)来解决问题。

只需将其添加到您的架构中即可:

Object.values(SomeEnumObj).concat([null])
Run Code Online (Sandbox Code Playgroud)

你的架构:

...

someKey: {
  type: Schema.Types.String,
  enum: Object.values(SomeEnumObj).concat([null]),
}

...
Run Code Online (Sandbox Code Playgroud)