MongoDB是一种文档导向的数据库,它以JSON(JavaScript对象表示法)的格式存储数据。在存储之前,需要定义数据结构和数据验证规则。MongoDB提供了validate_collection()
函数,用于检测集合中的文档是否符合指定的验证规则。
函数作用
validate_collection()
函数用于验证集合中的每个文档是否符合指定的验证规则。如果某个文档不符合规则,则会显示包含错误信息的结果。如果所有文档符合规则,则返回null
值。
使用方法
使用validate_collection()
函数需要满足以下条件:
* MongoDB版本>= 3.2
* 需要定义一个具体的文档验证规则(validation rule)。
定义文档验证规则:
验证规则必须包含在create
方法中,该方法会在创建集合的同时定义验证规则。
db.createCollection("users",
{ validator: { $jsonSchema: {
bsonType : "object",
required : [ "username", "password" ],
properties : {
username : {
bsonType : "string",
description : "must be a string and is required"
},
password : {
bsonType : "string",
description : "must be a string and is required"
}
}
} },
validationLevel: "strict",
validationAction: "error"
}
)
在集合中添加文档:
db.users.insert({"username": "tina", "password": "123456"})
db.users.insert({"username": "judy", "password": 123456})
调用validate_collection()
函数进行验证:
db.runCommand({validate: "users"})
输出结果:
{
"ok" : 1,
"result" : {
"valid" : true,
"errors" : [ ]
}
}
上述输出结果表明,集合中的文档符合定义的验证规则。
示例
下面提供一个更具体的实例:
定义验证规则:
按照上述格式,我们定义一个验证用户账号和密码是否符合要求的文档验证规则,其中,账号必须是字符串类型,长度在1-20之间;密码长度在6-16之间。具体的验证规则如下面代码所示。
db.createCollection("users",
{ validator: { $jsonSchema: {
bsonType : "object",
required : [ "username", "password" ],
properties : {
username : {
bsonType : "string",
description : "must be a string and is required",
minLength: 1,
maxLength: 20
},
password : {
bsonType : "string",
description : "must be a string and is required",
minLength: 6,
maxLength: 16
}
}
} },
validationLevel: "strict",
validationAction: "error"
}
)
在集合中添加文档:
db.users.insert({"username": "t", "password": "123"})
db.users.insert({"username": "test1234567890123456789", "password": "12345"})
db.users.insert({"username": "tina", "password": 1234567})
调用validate_collection()
函数进行验证:
db.runCommand({validate: "users"})
输出结果:
{
"ok" : 1,
"result" : {
"valid" : false,
"errors" : [
{
"category" : "validator",
"code" : 121,
"message" : "Document failed validation",
"details" : {
"validator" : {
"$jsonSchema" : {
"bsonType" : "object",
"required" : [
"username",
"password"
],
"properties" : {
"username" : {
"bsonType" : "string",
"description" : "must be a string and is required",
"minLength" : 1,
"maxLength" : 20
},
"password" : {
"bsonType" : "string",
"description" : "must be a string and is required",
"minLength" : 6,
"maxLength" : 16
}
}
}
},
"schema" : {
"username" : "string",
"password" : "string"
},
"uri" : "mongodb://localhost:27017/test.users",
"bsonType" : "object",
"violations" : [
{
"field" : "username",
"message" : "minLength validation failed"
},
{
"field" : "password",
"message" : "maxLength validation failed"
},
{
"field" : "password",
"message" : "minLength validation failed"
},
{
"field" : "username",
"message" : "maxLength validation failed"
}
]
}
}
]
}
}
上述输出结果表明,集合中的第一和第二文档没有符合规则,出现了两个验证错误:账号长度不够和密码超过了最大长度。第三个记录符合验证规则。