Черновик 4 для проверки схемы MongoDb Json

Я использую валидатор 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"
        }
})

person Ocirne    schedule 21.11.2019    source источник
comment
Код ошибки указан где-нибудь в документации mongodb?   -  person Relequestual    schedule 21.11.2019
comment
Код ошибки был кодом 121, который является ошибкой по умолчанию, которая выплевывается. Это не очень полезно для отладки, и приходилось прибегать к добавлению поля за полем и тестированию таким образом, что занимает больше времени, чем необходимо (на мой взгляд).   -  person Ocirne    schedule 25.11.2019
comment
Также есть билет (jira.mongodb.org/browse/SERVER-20547) в Программное обеспечение для разработки продуктов Mongo, созданное более 4 лет назад. Похоже, что в ближайшем будущем это не решится ...   -  person Ocirne    schedule 25.11.2019
comment
Ой. Спасибо за внимание. В схеме JSON 2019-09 мы определили стандартный набор структур вывода. Я могу понять их нежелание реализовывать что-то, что может оказаться полезным, а может и нет. Нам еще предстоит начать обсуждение с MongoDB для схемы JSON = /   -  person Relequestual    schedule 25.11.2019
comment
Конечно, без проблем! Я посмотрю на это, спасибо. Даже если бы они разрешили поле описания, это, вероятно, избавило бы от многих головных болей (даже в последних комментариях говорилось об этом).   -  person Ocirne    schedule 25.11.2019


Ответы (1)


Проблема была решена путем указания _id и включения его в обе возможные схемы oneOf. Я думаю, когда Mongo добавлял документ, он вставлял свой _id по умолчанию, который не был частью указанной схемы, и начал жаловаться.

Я хочу воспроизвести проблему, чтобы еще раз подтвердить, но насколько я помню, это была проблема.

person Ocirne    schedule 25.11.2019