MongoDb Json 模式验证草案 4

MongoDb Json Schema Validation Draft 4

我正在使用 Mongodb 的 oneOf 验证器,使用 JSON 模式验证。据我所知,MongoDb 支持架构验证草案 4,我使用的验证规则在 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[= 的对象时,为什么会失败24=]?

{
  $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"
        }
})

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

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