【问题标题】:MongoDb Json Schema Validation Draft 4MongoDb Json Schema 验证草案 4
【发布时间】:2019-11-21 12:52:22
【问题描述】:

我正在使用使用 JSON 模式验证的 Mongodb 的 oneOf 验证器。据我所知,MongoDb 支持 Draft 4 of Schema Validation 并且我使用的验证规则在 this online validator

中显示为有效

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "foo": {},
      "bar": {}
    },
    "oneOf": [
      {
        "type": "object",
        "properties": {
          "foo": {}
        },
        "additionalProperties": false
      },
      {
        "type": "object",
        "properties": {
           "bar": {}
        },
        "additionalProperties": false
      }
    ]
}

我传递的输入文件是

{  
    "bar": {},
}

当我在 Mongo 中使用相同的模式验证并传入具有属性 foo 或属性 bar 的对象时,为什么会失败?

{
  $jsonSchema: {
    bsonType: 'object',
    additionalProperties: false,
    properties: {
      foo: {
        bsonType: 'string'
      },
      bar: {
        bsonType: 'string'
      }
    },
    oneOf: [
      {
        bsonType: 'object',
        properties: {
          foo: {
            bsonType: 'string'
          }
        },
        additionalProperties: false
      },
      {
        bsonType: 'object',
        properties: {
          bar: {
            bsonType: 'string'
          }
        },
        additionalProperties: false
      }
    ]
  }
}


db.dmt2.insert({"bar": ""})
WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 121,
                "errmsg" : "Document failed validation"
        }
})

【问题讨论】:

  • 错误代码是否列在 mongodb 文档的任何地方?
  • 错误代码是代码 121,这是吐出的默认错误。它对调试不是很有用,不得不求助于逐个字段添加并以这种方式进行测试,这比必要的时间要长(在我看来)。
  • Mongo 的产品开发软件中还有一张票 (jira.mongodb.org/browse/SERVER-20547),它是在 4 年前创建的。这似乎在不久的将来无法解决......
  • 哎呀。感谢您的提醒。使用 JSON Schema 2019-09,我们定义了一组标准的输出结构。我可以理解他们不愿意实施一些可能有用也可能没用的东西。我们尚未就 JSON Schema 与 MongoDB 展开讨论 =/
  • 当然,没有问题!这是我会看的东西,谢谢。即使他们允许描述字段,它也可能会省去很多麻烦(甚至最后的 cmets 都这么说)。

标签: json jsonschema json-schema-validator


【解决方案1】:

通过指定 _id 并将其包含在 oneOf 的两个可能模式中,问题已得到解决。我认为当 Mongo 添加一个文档时,它插入了它的默认 _id ,它不是指定模式的一部分,它开始抱怨。

我想复制该问题以重新确认,但据我所知,这是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多