【问题标题】:Mongoose type unique with case sensitiveMongoose 类型独特,区分大小写
【发布时间】:2016-05-27 19:43:41
【问题描述】:

这是我的猫鼬模式,deptName 是唯一的, 但我也希望它区分大小写,例如如果 xyz 保存在 db 中,那么 XYZ 不应该保存。

var department = mongoose.Schema({
    deptName: {
        type: String,
        unique: true,
        required: true
    },
    deptHead: {
        type: mongoose.Schema.ObjectId,
        ref: 'employee'
    },
    active: {
        type: Boolean,
        default: true
    }
});

【问题讨论】:

  • 我认为您的意思是区分大小写?喜欢这个问题:stackoverflow.com/questions/13991604/…
  • @JohnnyHK,我在 Mongoose v4.4.3 中测试了lowercase,它会将XYZ 转换为xyz,并将其保存到db...也许自定义验证应该更好.. .

标签: mongoose


【解决方案1】:

尝试通过String validation 中的lowercase 来实现。将lowercase 添加到您的架构中,如下所示

var departmentSchema = mongoose.Schema({
    deptName: {
        type: String,
        unique: true,
        required: true,
        lowercase: true
    }
});

当您尝试将XYZ 保存到deptName 时。验证应该失败并且无法将此文档保存到集合中。

但是,我在Mongoose v4.4.3 中使用以下代码对其进行了测试

var d = new Depart({
    deptName: 'XYZAA'
});

d.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('Save department successfully...');
});

它可以成功保存文档并将XYZ转换为xyz

{ "_id" : ObjectId("56c3dae36a4d4f041548f7e0"), "deptName" : "xyz", "__v" : 0 }

另一种自定义验证的方法如下

var departmentSchema = mongoose.Schema({
    deptName: {
        type: String,
        unique: true,
        required: true,
        validate: {
          validator: function(v) {
            if (v && v.length)
                var re = /^[a-z]$/i; 
                return re.test(v);
          },
        }
    }
});

当尝试将XYZ保存到deptname时,会出现验证错误。

{ [ValidationError: Depart validation failed]
  message: 'Depart validation failed',
  name: 'ValidationError',
  errors:
   { deptName:
      { [ValidatorError: Validator failed for path `deptName` with value `XYZ`]
        properties: [Object],
        message: 'Validator failed for path `deptName` with value `XYZ`',
        name: 'ValidatorError',
        kind: 'user defined',
        path: 'deptName',
        value: 'XYZ' } } }

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 2012-06-09
    • 2017-06-26
    • 2012-12-01
    • 2013-03-06
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多