猫鼬模式验证:在字符串字段中阻止某些字符

时间:2019-01-23 10:36:16

标签: javascript mongodb validation mongoose schema

是否可以在服务器端的猫鼬模式验证中阻止某个字符?

我有这样的架构:

O(n)

我想知道是否可以确保用户在“城市”字段中不能输入“ $”字符。我可以在架构中执行操作,还是需要其他工具,例如Yup

2 个答案:

答案 0 :(得分:0)

MongoDB 3.2更新

MongoDB现在支持文档验证。

documentation 中的示例:

db.createCollection( "contacts",
   { validator: { $or:
      [
         { phone: { $type: "string" } },
         { email: { $regex: /@mongodb\.com$/ } },
         { status: { $in: [ "Unknown", "Incomplete" ] } }
      ]
   }
} )

答案 1 :(得分:0)

Mongoose 有一个内置的正则表达式验证器:属性的 match 字段。

还请记住,Mongoose 具有任意验证,并且您应该几乎永远不要在将数据输入数据库之前直接进行其他验证,因为那样应该< /em> 重复。 ORM(或者,对于 MongoDB,ODM)的重点是处理数据结构。

不过,我将展示 match 的使用以及更一般的验证器,但在这种情况下,最好使用 match

const address = {
  city: {
    type: String,
    required: true,
    maxlength: 25,

    // Built in match validator.
    match: /^[^$]+$/,

    // Single validator
    validate(value) {
        return !value.includes("$")
    },

    // Single validator with message
    validate: {
        validator(value) {
            return !value.includes("$")
        },
        message: "city must not include a dollarsign"
    },

    // Multiple validators
    validate: [
        {
            validator(value) {
                return !value.includes("$")
            },
            message: "city must not include a dollarsign"
        },
        {
            // Other validation logic
        }
    ]
  }
  country: {
    type: String,
    required: true,
    maxlength: 25
  }
 postalcode: {
    type: String,
    required: true,
    maxlength: 9
  }
}