问题描述
在RDBMS中,每列的类型均类似CHAR
,INTEGER
等。
在MongoDB中,使用mongo shell api在people
集合中添加以下文档:
> db.people.insert({"name": 1})
MongoDB允许为1
键添加值"name"
,这是不正确的
在将文档添加到集合中之前如何执行类型检查?
解决方法
您可以这样做。这只是一个例子。
db.createCollection( "people",{
validator: {
$jsonSchema: {
bsonType: "object",additionalProperties: false,//wont't allow additional properties to be added,Use if you want to restrict people from adding extra fields.
required: ["name","age"],//document must contain these fields,else operation will fail/log warning depending on `validationLevel` and `validationAction`
properties: {
_id : {
bsonType: "objectId" },name: {
bsonType: "string",//type of name
description: "required and must be a string" },age: {
bsonType: "int",//type of age
minimum: 0,maximum: 100,description: "required and must be in the range 0-100" }
}
}},validationLevel: "moderate",validationAction: "error"
})
-
要在创建新集合时指定验证规则,请将
db.createCollection()
与validator
选项一起使用。然后在文档$jsonSchema
中使用validator
在insert
和update
操作上强制执行指定的架构。 -
validationLevel选项,该选项确定MongoDB在更新过程中对现有文档应用验证规则的严格程度,以及
-
validationAction选项,该选项确定MongoDB是应该出错还是拒绝违反验证规则的文档,或者警告日志中的违规但允许无效文档。
-
要将文档验证添加到现有集合中,请使用带有
collMod
选项的validator
命令。 -
将验证添加到集合时,现有文档直到进行修改才进行验证检查。
请仔细阅读以下链接:-
https://docs.mongodb.com/manual/core/schema-validation/
https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/#op._S_jsonSchema