是否可以设置满足以下要求的mongoose模式:1.非必填1.类型为“string”type: String1.有一个枚举enum: ['red', 'green']1.默认设置为nulldefault: null
type: String
enum: ['red', 'green']
default: null
0aydgbwb1#
所以,我想办法弄明白了。当我读了更多的书,明白了当你定义不同的东西时会发生什么时,这就变得清晰了。
Goal:我希望有一个mongoose schema属性,该属性为null或string。如果它是一个string,我想验证和检查该值是否严格等于给定数组中的一个值。
null
string
color: { type: String, enum: ['red', 'green'], default: null }
这是行不通的有两种情况:1.如果传入对象上的color属性 exists,那么它的值会被enum验证器验证,一切正常。1.如果color属性 * 在传入对象上不存在 *,我想将null保存为color的值。在本例中,传入的属性color是undefined,因此无论我们为default定义了什么,都将被作为要为color设置的值,就像在第一个场景中一样,它将被enum验证器验证。显然,如果使用null,将导致错误。为了避免这种情况,我将enum验证器替换为自定义验证器。
color
enum
undefined
default
color: { type: String, validate: (value: string | null) => { if (value === null) return true; return ['red', 'green'].includes(value); // you could use enum here // return Object.values(MyEnum).includes(value as MyEnum); }, default: null }
我们的自定义验证器将 * 总是 * 运行,因为根据Mongoose的文档,验证器不会在未定义的值上运行,我们在任何情况下都不会有。
**注意:**Mongoose规则的唯一例外是required验证器,它会保证当其他验证器运行时,color * 不会是 * undefined。但那不是我的案子。我希望color是可选的。我的理由是,我不希望前端确保在业务逻辑不需要时发送它。
required
1条答案
按热度按时间0aydgbwb1#
所以,我想办法弄明白了。当我读了更多的书,明白了当你定义不同的东西时会发生什么时,这就变得清晰了。
Goal:我希望有一个mongoose schema属性,该属性为
null
或string
。如果它是一个string
,我想验证和检查该值是否严格等于给定数组中的一个值。这是行不通的有两种情况:
1.如果传入对象上的
color
属性 exists,那么它的值会被enum
验证器验证,一切正常。1.如果
color
属性 * 在传入对象上不存在 *,我想将null
保存为color
的值。在本例中,传入的属性color
是undefined
,因此无论我们为default
定义了什么,都将被作为要为color
设置的值,就像在第一个场景中一样,它将被enum
验证器验证。显然,如果使用null
,将导致错误。为了避免这种情况,我将enum
验证器替换为自定义验证器。我们的自定义验证器将 * 总是 * 运行,因为根据Mongoose的文档,验证器不会在未定义的值上运行,我们在任何情况下都不会有。
**注意:**Mongoose规则的唯一例外是
required
验证器,它会保证当其他验证器运行时,color
* 不会是 *undefined
。但那不是我的案子。我希望color
是可选的。我的理由是,我不希望前端确保在业务逻辑不需要时发送它。