我试过这个,允许null
,undefined
,并完全省略要保存的密钥:
{
myField: {
type: String,
validate: value => typeof value === 'string',
},
}
这个,不允许保存''
(空字符串):
{
myField: {
type: String,
required: true,
},
}
如何在不禁用空字符串的情况下强制执行某个字段为String
并且在Mongoose中同时显示null
和undefined
?
答案 0 :(得分:3)
通过使必填字段成为条件,可以实现:
const mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
myField: {
type: String,
required: isMyFieldRequired,
}
});
function isMyFieldRequired () {
return typeof this.myField === 'string'? false : true
}
var User = mongoose.model('user', userSchema);
这样,new User({})
和new User({myField: null})
会抛出错误。但空字符串将起作用:
var user = new User({
myField: ''
});
user.save(function(err, u){
if(err){
console.log(err)
}
else{
console.log(u) //doc saved! { __v: 0, myField: '', _id: 5931c8fa57ff1f177b9dc23f }
}
})
答案 1 :(得分:1)
只需编写一次,它将应用于所有架构
mongoose.Schema.Types.String.checkRequired(v => typeof v === 'string');
中的此方法
答案 2 :(得分:0)
您现在可以在字符串上使用“匹配”属性。 match 属性采用正则表达式。所以你可以使用这样的东西:
myfield: {type: String, required: true, match: /^(?!\s*$).+/}
字符串架构的文档,包括匹配:https://mongoosejs.com/docs/api.html#schemastringoptions_SchemaStringOptions-match
答案 3 :(得分:-1)
验证将像
一样name: {
type: String,
validate: {
validator: function (v) {
return /^[a-zA-Z]+$/.test(v);
},
message: '{PATH} must have letters only!'
},
},
在模型中试试