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