{test:"123"}
е неуспешна проверка, защото не отговаря на нито една от схемите в anyOf
, които се нуждаят от test1
или test2
като единствен ключ.
anyOf
прилага всяка подсхема към вашето копие и твърди, че е валидна, ако поне една от подсхемите премине проверката.
{test1: "123" }
се проваля, защото основните схеми additionalProperties: false
предотвратява всякакви ключове във вашия обект, които не са дефинирани в СЪЩИЯ обект на схема properties
или patternProperties
.
Решението е да има известно дублиране.
In THIS
пример (връзката е за тестване на браузър, но само за чернова-7), добавих основни свойства test1
и test2
. Това ще позволи данни, при които имате ключ от test1
или test2
за преминаване, но като се има предвид, че не знам вашите изисквания, не мога да ви кажа как да модифицирате схемата, за да разрешите обект с ключ на test
за преминаване (като всеки от anyOf
подсхемите го предотвратяват).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Ако намерението ви е да проверите дали едно от нещата, които вмъквате, има test1
или test2
, тогава се страхувам, че JSON Schema не може да ви помогне. JSON Schema в контекста на Mongo може да проверява само всеки елемент поотделно и не й е предоставена възможността да валидира колекция от потенциално вмъкнати записи.
В горната примерна схема премахнах проверката на типа, защото това не е от значение за този въпрос, а bsonType така или иначе се различава от типа на схемата JSON.