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