如何在MongoDB中对文档值执行类型检查?

问题描述

在RDBMS中,每列的类型均类似CHARINTEGER等。

在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中使用validatorinsertupdate操作上强制执行指定的架构。

  • 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