当我尝试以以下形式在电话字段上应用正则表达式验证时,出现“ 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测试人员进行了验证。.全部失败。.::(
谢谢您的帮助,祝大家生活愉快!
答案 0 :(得分:0)
这里的关键是正则表达式模式,您需要在这里将双反斜杠
pattern: "^(0|\\+33)[1-9]([-. ]?[0-9]{2}){4}$"
注意:
我不确定如何更新现有的验证器,因此我删除了customers
集合并使用正确的验证器模式重新创建