{test:"123"}
validatie mislukt omdat het niet voldoet aan een van de schema's in anyOf
, die test1
. nodig hebben of test2
als de enige sleutel.
anyOf
past elk subschema toe op uw instantie en beweert geldig te zijn als ten minste één van de subschema's de validatie doorstaat.
{test1: "123" }
mislukt omdat de hoofdschema's additionalProperties: false
voorkomt sleutels in uw object die niet zijn gedefinieerd in het SAME-schemaobject properties
of patternProperties
.
De oplossing is om wat duplicatie te hebben.
In THIS
voorbeeld (link is voor browsertests maar alleen draft-7), ik heb root-eigenschappen toegevoegd test1
en test2
. Dit zal gegevens toestaan waarbij u een sleutel van test1
. heeft of test2
slagen, maar aangezien ik uw vereisten niet ken, kan ik u niet vertellen hoe u het schema moet wijzigen om een object met een sleutel van test
toe te staan door te geven (zoals elk van de anyOf
subschema's voorkomen dit).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Als het uw bedoeling is om te controleren of een van de dingen die u invoert test1
. heeft of test2
, dan ben ik bang dat JSON Schema je niet kan helpen. JSON Schema in de context van Mongo kan elk item alleen afzonderlijk controleren en heeft niet de mogelijkheid om een verzameling mogelijk ingevoegde records te valideren.
In het bovenstaande voorbeeldschema heb ik typecontrole verwijderd omdat dat niet relevant is voor deze vraag, en bsonType verschilt sowieso van het JSON-schematype.