最小长度验证器不适用于猫鼬

时间:2019-11-13 06:03:52

标签: javascript node.js mongodb mongoose

我已经在猫鼬中创建了架构

let userSchema = new Schema({
    name: {
        type: String,
        required: true,
        lowercase: true,
        trim: true,
        minLength: 4,
        maxLength: 15
    }
});

当我使用此查询更新

user.updateOne(
        { "_id" : body.id },
        { $set: {
            name:body.name,
            phone:body.phone,
            designation:body.designation,
            address:body.address
        } }
    ).then(function (updateDate) {
        var data={message:"success",data:updateDate}
        callback(data)
    }).catch(function (err) {
        var data={message:"error",data:err}
        callback(data);
    });

如果我更新2长度的字符串,它不会引发任何错误。 关于stackoverflow的解决方案很少,但在我看来这些解决方案不起作用

2 个答案:

答案 0 :(得分:0)

首先,在您的架构中,minLength必须为minlength,并且maxLength必须为maxlength,且小写字母为 l

因此您的架构必须是这样的:

let userSchema = new Schema({
    name: {
        type: String,
        required: true,
        lowercase: true,
        trim: true,
        minlength: 4,
        maxlength: 15
    }
});

第二,您需要按照Cuong的回答所述,向您的updateOne添加{runValidators: true}选项。

  

默认情况下,更新验证器处于关闭状态-您需要指定   runValidators选项。

所以您的代码必须是这样的:

  user.updateOne(
    { _id: body.id },
    {
      $set: {
        name: body.name,
        phone: body.phone,
        designation: body.designation,
        address: body.address
      }
    },
    { runValidators: true }
  )
    .then(function(updateDate) {
      var data = { message: "success", data: updateDate };
      callback(data);
    })
    .catch(function(err) {
      var data = { message: "error", data: err };
      callback(data);
    });

答案 1 :(得分:0)

您只需打开mongodb Compass,然后转到“验证”选项并将验证级别更改为严格模式。