{test:"123"}
non riesce la convalida perché non è conforme a nessuno degli schemi in anyOf
, che richiedono test1
o test2
come unica chiave.
anyOf
applica ogni sottoschema alla tua istanza e si dichiara valido se almeno uno dei sottoschemi supera la convalida.
{test1: "123" }
non riesce perché gli schemi radice additionalProperties: false
impedisce qualsiasi chiave nel tuo oggetto non definita nelle properties
dell'oggetto SAME schema o patternProperties
.
La soluzione è avere qualche duplicazione.
In THIS
esempio (il collegamento è per il test del browser ma solo per la bozza-7), ho aggiunto le proprietà radice test1
e test2
. Ciò consentirà i dati in cui hai una chiave di test1
o test2
per passare, ma dato che non conosco le tue esigenze, non posso dirti come modificare lo schema per consentire un oggetto con una chiave di test
passare (come ciascuno dei anyOf
i sottoschemi lo impediscono).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Se il tuo intento è verificare che una delle cose che stai inserendo abbia test1
o test2
, quindi temo che JSON Schema non possa aiutarti. Schema JSON nel contesto di Mongo può solo controllare ogni elemento individualmente e non ha la possibilità di convalidare una raccolta di record potenzialmente inseriti.
Nello schema di esempio sopra, ho rimosso il controllo del tipo perché non è rilevante per questa domanda e bsonType è comunque diverso dal tipo di schema JSON.