{test:"123"}
se nezdaří ověření, protože neodpovídá žádnému ze schémat v anyOf
, které potřebují test1
nebo test2
jako jediný klíč.
anyOf
použije každé podschéma na vaši instanci a potvrdí platnost, pokud alespoň jedno z podschémat projde validací.
{test1: "123" }
selže, protože kořenová schémata additionalProperties: false
zabrání všem klíčům ve vašem objektu, které nejsou definovány ve STEJNÉM objektu schématu properties
nebo patternProperties
.
Řešením je mít nějakou duplikaci.
In THIS
příklad (odkaz je pro testování prohlížeče, ale pouze draft-7), přidal jsem kořenové vlastnosti test1
a test2
. To umožní data, kde máte klíč test1
nebo test2
projít, ale vzhledem k tomu, že neznám vaše požadavky, nemohu vám říci, jak upravit schéma tak, aby umožňovalo objekt s klíčem test
předat (jako každý z anyOf
tomu brání podschémata).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Pokud je vaším záměrem zkontrolovat, zda jedna z věcí, které vkládáte, má test1
nebo test2
, pak se obávám, že schéma JSON vám nemůže pomoci. Schéma JSON v kontextu Mongo může kontrolovat každou položku pouze jednotlivě a nemá možnost ověřit kolekci potenciálně vložených záznamů.
Ve výše uvedeném vzorovém schématu jsem odstranil kontrolu typu, protože to není pro tuto otázku relevantní a bsonType se stejně liší od typu schématu JSON.