{test:"123"}
mislykkes validering, fordi den ikke er i overensstemmelse med nogen af skemaerne i anyOf
, som har brug for test1
eller test2
som den eneste nøgle.
anyOf
anvender hvert underskema til din instans og hævder gyldigt, hvis mindst et af underskemaerne består valideringen.
{test1: "123" }
mislykkes, fordi rodskemaerne additionalProperties: false
forhindrer nøgler i dit objekt, der ikke er defineret i SAME skemaobjektet properties
eller patternProperties
.
Løsningen er at have nogle overlapninger.
In THIS
eksempel (linket er til browsertest, men kun draft-7), jeg har tilføjet rodegenskaber test1
og test2
. Dette vil tillade data, hvor du har nøglen test1
eller test2
at bestå, men da jeg ikke kender dine krav, kan jeg ikke fortælle dig, hvordan du ændrer skemaet for at tillade et objekt med nøglen test
at bestå (som hver af anyOf
underskemaer forhindrer det).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Hvis din hensigt er at kontrollere, at en af de ting, du indsætter, har test1
eller test2
, så er jeg bange for, at JSON Schema ikke kan hjælpe dig. JSON Schema i forbindelse med Mongo kan kun kontrollere hvert element individuelt og har ikke mulighed for at validere en samling af potentielt indsatte poster.
I ovenstående eksempelskema har jeg fjernet typekontrol, fordi det ikke er relevant for dette spørgsmål, og bsonType adskiller sig alligevel fra JSON Schema-typen.