MongoDB(Mongoose):如何验证文档字段仅允许.gci扩展名?
验证Mongoose Schema中file字段仅允许.gci结尾的字符串
完全可以直接在Mongoose Schema中实现这个验证,无需额外在其他环节处理,以下是两种实用的实现方式:
方法一:使用match正则匹配验证
借助Mongoose内置的match验证器,通过正则表达式直接校验字符串是否以.gci结尾:
const schema = new mongoose.Schema({ file: { type: String, required: [true, "Please provide a .gci file"], match: [/\.gci$/, "File must end with .gci"] }, });
正则/\.gci$/中,$锚定字符串末尾,\.转义点号(避免正则中点的通配符特性),确保只有以.gci结尾的字符串能通过验证,不匹配时会返回指定的错误提示。
方法二:自定义validate验证函数
如果需要更灵活的校验逻辑(比如忽略大小写、附加其他判断条件),可以通过validate属性定义自定义验证器:
const schema = new mongoose.Schema({ file: { type: String, required: [true, "Please provide a .gci file"], validate: { validator: function(v) { // 如需忽略大小写,可改为 v.toLowerCase().endsWith('.gci') return v.endsWith('.gci'); }, message: props => `${props.value} is not a valid .gci file!` } }, });
validator函数接收字段值v,返回布尔值表示校验是否通过;message支持动态生成错误提示,props.value会带入当前不符合要求的输入值。
以上两种方式均能在Schema层面完成验证,当创建或更新文档时,Mongoose会自动执行校验逻辑,不通过则抛出验证错误。
内容的提问来源于stack exchange,提问作者Brenden Baio
相关产品推荐
相关产品推荐

