我试过这个,它允许 nullundefined ,并完全省略要保存的 key :

{
  myField: {
    type: String,
    validate: value => typeof value === 'string',
  },
}

这不允许保存 '' (空字符串):
{
  myField: {
    type: String,
    required: true,
  },
}

如何在 Mongoose 中强制字段为 String 并且不存在 nullundefined 而不禁止空字符串?

最佳答案

通过使所需字段有条件,可以实现:

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 }
    }
})

关于mongoose - 在 Mongoose 中,我如何要求字符串字段不为空或未定义(允许长度为 0 的字符串)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44320745/

10-16 17:56