MongoDB如何使用JSON Schema关键字" oneOf"验证?

时间:2018-04-17 07:28:27

标签: json mongodb pymongo jsonschema json-schema-validator

下面定义了json架构。我已经测试了anyOf,oneOf,allOf。架构在除了oneOf之外的所有情况下都能正常工作。理想情况下,它应该只在一个工作。它不起作用。

{
  "bsonType": "object",
  "additionalProperties": true,
  "properties": {
    "_id": {},
    "enhanced_file_url": {
      "bsonType": "string"
    },
    "child_docs": {
      "type": [
        "array"
      ],
      "items": {
        "bsonType": "object",
        "additionalProperties": true,
        "properties": {
          "_id": {},
          "standardized_data": {
            "oneOf": [
              {
                "bsonType": "object",
                "properties": {
                  "shipper__address_line_1": {
                    "bsonType": "string"
                  }
                }
              },
              {
                "bsonType": "object",
                "properties": {
                  "shipper__address_line_2": {
                    "bsonType": "double"
                  }
                }
              }
            ]
          },
          "standardized_field_prediction": {
            "bsonType": "object",
            "additionalProperties": true
          }
        }
      }
    }
  }
}

以下是json数据的输入格式。

{ 
    "enhanced_file_url" : "http://localhost:9000/documents/5ab51e99534b44180e0bdb0c/document_download", 
    "child_docs" : [
    {
        "standardized_data" : {
            "shipper__address_line_1": "A28 pariseema Complex"
        }
    },
    {
        "standardized_data" : {
            "shipper__address_line_2": "A1-63 Orchid Greenfield"
        }
    }
]}

当我们运行上面的架构时,它会给出错误

1 个答案:

答案 0 :(得分:0)

要针对oneOf进行验证,给定的数据必须针对给定子方案中的恰好一个有效。

您要插入的子文档满足oneOf字段中提供的两个条件,因为它们是对象:

child_docs[0]满足 oneOf[0]oneOf[1]因为它是一个对象

因此,您应该改用anyOf