如何允许猫鼬模式中的枚举字段为空?
Posted
技术标签:
【中文标题】如何允许猫鼬模式中的枚举字段为空?【英文标题】:how to allow nullable for an enum field in mongoose schema? 【发布时间】:2020-12-20 10:51:48 【问题描述】:我正在尝试使用 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: 'some@email.com',
).exec()
以下错误抛出:
users validation failed: someKey: `null` is not a valid enum value for path `someKey`.,
我可以通过设置来解决这个问题:
enum: [...Object.values(SomeEnumObj), null]
但我想知道是否有更好或更正确的方法来执行此操作,因为我的解决方案感觉有点笨拙,我希望如果我将默认设置为 null,验证器将允许它为 null。
【问题讨论】:
您不能将 null 作为值包含在SomeEnumObj
中吗? --> SomeEnumObj = TEST: "TEST", _null: null
mmmm 我已经考虑过了。但我也将枚举用作验证器,因此在编辑用户时,不允许 someKey 为空...我刚刚意识到这是一个非常糟糕的做法,所以我只是将空添加到枚举/禁止值可以为空...
【参考方案1】:
基于this issue 我也没有找到任何合适的解决方案,因为这也是我的问题。我相信没有必要添加 null 作为 默认值 (default: null)
来解决问题。
只需将其添加到您的架构中:
Object.values(SomeEnumObj).concat([null])
您的架构:
...
someKey:
type: Schema.Types.String,
enum: Object.values(SomeEnumObj).concat([null]),
...
【讨论】:
仅nullable:true
对我不起作用,我必须添加.concat([null]),
nullable: true
没用以上是关于如何允许猫鼬模式中的枚举字段为空?的主要内容,如果未能解决你的问题,请参考以下文章