提问者:小点点

MongoDb Json架构验证草案4


我正在使用Mongodb的oneOf验证程序,使用JSON模式验证。据我所知,MongoDb支持模式验证草案4,我使用的验证规则在此在线验证器中显示为有效


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

共1个答案

匿名用户

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

我想重复这个问题来重新确认,但据我记忆所及,这就是问题所在。