MongoError:由于正则表达式模式导致文档验证失败?

时间:2019-04-29 13:12:54

标签: node.js mongodb

当我尝试以以下形式在电话字段上应用正则表达式验证时,出现“ MongoError:文档验证失败”的消息:

db.createCollection("customers", {
       validator: {
          $jsonSchema: {
             bsonType: "object",
             required: [ "Email", "Phone"],
          properties: {
   Email: {
           bsonType: "string",
           pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}$",
           description: "E-mail must be a string and a true e-mail "
          },

   Phone: {
           bsonType: "string",
           pattern:"^(0|\+33)[1-9]([-. ]?[0-9]{2}){4}$",
           description: "Phone must be a 10 digits french phone number, eventually using 33 format"
        },

然后我尝试插入一个这样的文档:

var db = client.db("dbName");
var testObj = {Email: "EMAIL@DOMAIN.COM", Phone: "+33606060606"};

db.collection("customers").insertOne(testObj, function(err, res) {
etc.});

==>失败。

如果我删除电话字符串:

var db = client.db("dbName");
var testObj = {Email: "EMAIL@DOMAIN.COM"};

db.collection("customers").insertOne(testObj, function(err, res) {
etc.});

==>可以。

如果我在创建“客户”集合时删除了正则表达式模式,那么它将起作用。

我已经尝试了多个正则表达式/示例,这些示例均已在在线正则表达式上针对Javascript测试人员进行了验证。.全部失败。.::(

谢谢您的帮助,祝大家生活愉快!

1 个答案:

答案 0 :(得分:0)

这里的关键是正则表达式模式,您需要在这里将双反斜杠

    pattern: "^(0|\\+33)[1-9]([-. ]?[0-9]{2}){4}$"

注意: 我不确定如何更新现有的验证器,因此我删除了customers集合并使用正确的验证器模式重新创建