我正在使用mongoose,并尝试设置一个自定义验证,如果另一个属性值被设置为某个值,则该属性将是必需的(即非空)。
thing: {
type: String,
validate: [
function validator(val) {
return this.type === 'other' && val === '';
}, '{PATH} is required'
]}
- 如果我用
{"type":"other", "thing":""}
保存模型,它会正确地失败。 - 如果我用
{"type":"other", "thing": undefined}
或{"type":"other", "thing": null}
或{"type":"other"}
保存模型,则验证函数永远不会执行,并且“无效”数据被写入DB。
4条答案
按热度按时间l2osamch1#
从mongoose 3.9.1开始,可以在模式定义中向
required
参数传递一个函数,这样就解决了这个问题。另见mongoose的对话:https://github.com/Automattic/mongoose/issues/941
njthzxwz2#
不管出于什么原因,Mongoose的设计者决定,如果字段的值是
null
,那么就不应该考虑自定义验证,这使得条件验证变得不方便。我发现,解决这个问题的最简单的方法是使用一个高度唯一的默认值,我认为它“类似于null”。一个完整的黑客,但它已经为我工作到目前为止。
hsvhsicv3#
尝试将此验证添加到
type
属性,然后相应地调整验证。例如:sf6xfgos4#