{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.