4.6 JSON Schema 验证

可以配置集合以根据 JSON schema 验证文档。这使您能够在文档插入或更新到集合之前要求它们具有特定的结构。您按照 http://json-schema.org 中的描述指定 JSON schema。schema 验证由服务器执行,如果集合中的文档未通过分配的 JSON schema 验证,则返回错误消息。有关 MySQL 中 JSON schema 验证的更多信息,请参阅 JSON Schema 验证函数。本节介绍如何配置集合以根据 JSON schema 验证文档。

要启用或修改 JSON schema 验证,您需要为集合提供一个类似于以下内容的 validation JSON 对象

{
    validation: {
      level: "off|strict",
      schema: "json-schema"
    }
}

此处,validation 是一个 JSON 对象,包含您可以用来配置 JSON schema 验证的键。第一个键是 level,它可以取值 strictoff。第二个键 schema 是 JSON schema,如 http://json-schema.org 中所定义。如果 level 键设置为 strict,则在文档添加到集合时或如果文档已在集合中,则在某些操作对其进行更新时,会根据 json-schema 对文档进行验证。如果文档未通过验证,服务器会生成错误,并且操作失败。如果 level 键设置为 off,则不会根据 json-schema 对文档进行验证。

创建经过验证的集合

要启用在创建新集合时进行 JSON schema 验证,请提供一个如上所述的 validation JSON 对象。例如,要创建一个保存经度和纬度值的集合,并要求验证这些值为数字

var coll = schema.createCollection("longlang", {
  validation: {
    level: "strict",
    schema:   {
      "id": "http://json-schema.org/geo",
      "$schema": "http://json-schema.org/draft-06/schema#",
      "description": "A geographical coordinate",
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        }
      },
      "required": ["latitude", "longitude"]
    }
  }
})

修改集合验证

您可以修改集合以控制文档的 JSON schema 验证。例如,您可以启用或禁用验证,或更改文档验证所依据的 JSON schema。

为了修改集合的 JSON schema 验证,在调用 Collection.modify() 方法时,请提供一个 validation JSON 对象。例如,要修改集合以禁用 JSON schema 验证,validation 对象将为

{ 
   validation: {
       "level": "off"
   }
}

在修改 JSON schema 验证时,您可以只提供 level 选项来更改 schema 验证级别。例如,传递上面所示的 JSON 对象以禁用 JSON schema 验证。这不会对之前指定的 JSON schema 进行任何更改,也不会从集合中删除 JSON schema。或者,您也可以只通过传递新的 JSON schema 对象来修改 schema。