sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf no funciona

{test:"123"} falla la validación porque no se ajusta a ninguno de los esquemas en anyOf , que necesitan test1 o test2 como única clave.

anyOf aplica cada subesquema a su instancia y afirma que es válido si al menos uno de los subesquemas pasa la validación.

{test1: "123" } falla porque los esquemas raíz additionalProperties: false evita que cualquier clave en su objeto no esté definida en el MISMO objeto de esquema properties o patternProperties .

La solución es tener alguna duplicación.

In THIS ejemplo (el enlace es para pruebas en el navegador, pero solo para draft-7), agregué propiedades raíz test1 y test2 . Esto permitirá datos donde tenga una clave de test1 o test2 para aprobar, pero dado que no conozco sus requisitos, no puedo decirle cómo modificar el esquema para permitir un objeto con una clave de test pasar (como cada uno de los anyOf los subesquemas lo impiden).

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "_id": {},
    "test": {},
    "test1": {},
    "test2": {}
  },
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "test1": {}
      },
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "test2": {}
      },
      "additionalProperties": false
    }
  ]
}

Si su intención es verificar que una de las cosas que está insertando tiene test1 o test2 , entonces me temo que JSON Schema no puede ayudarlo. JSON Schema en el contexto de Mongo solo puede verificar cada elemento individualmente y no tiene la capacidad de validar una colección de registros potencialmente insertados.

En el esquema de ejemplo anterior, eliminé la verificación de tipos porque no es relevante para esta pregunta, y bsonType difiere del tipo de esquema JSON de todos modos.