{test:"123"}
misslyckas med valideringen eftersom den inte överensstämmer med något av schemana i anyOf
, som behöver test1
eller test2
som den enda nyckeln.
anyOf
tillämpar varje underschema på din instans och hävdar giltigt om minst ett av underschemana klarar valideringen.
{test1: "123" }
misslyckas eftersom rotschemat additionalProperties: false
förhindrar alla nycklar i ditt objekt som inte är definierade i SAME schemaobjektets properties
eller patternProperties
.
Lösningen är att ha lite dubbelarbete.
In THIS
exempel (länken är för webbläsartestning men endast draft-7), jag har lagt till rotegenskaper test1
och test2
. Detta tillåter data där du har nyckeln test1
eller test2
att godkänna, men eftersom jag inte känner till dina krav kan jag inte berätta hur du ändrar schemat för att tillåta ett objekt med nyckeln test
att passera (som var och en av anyOf
underscheman förhindrar det).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Om din avsikt är att kontrollera att en av sakerna du infogar har test1
eller test2
, då är jag rädd att JSON Schema inte kan hjälpa dig. JSON Schema i Mongo-sammanhang kan endast kontrollera varje objekt individuellt och har inte möjlighet att validera en samling potentiellt infogade poster.
I exemplet ovan har jag tagit bort typkontroll eftersom det inte är relevant för den här frågan, och bsonType skiljer sig ändå från JSON Schema-typen.