{test:"123"}
nie powiedzie się walidacja, ponieważ nie jest zgodny z żadnym ze schematów w anyOf
, które wymagają test1
lub test2
jako jedyny klucz.
anyOf
stosuje każdy schemat podrzędny do Twojej instancji i potwierdza poprawność, jeśli co najmniej jeden ze schematów podrzędnych przejdzie weryfikację.
{test1: "123" }
nie powiedzie się, ponieważ schematy główne additionalProperties: false
zapobiega wszelkim kluczom w twoim obiekcie, które nie są zdefiniowane w SAME obiekcie schematu properties
lub patternProperties
.
Rozwiązaniem jest pewne duplikowanie.
In THIS
przykład (link jest do testowania przeglądarki, ale tylko draft-7), dodałem właściwości root test1
i test2
. Pozwoli to na dane, w których masz klucz test1
lub test2
do zaliczenia, ale biorąc pod uwagę, że nie znam twoich wymagań, nie mogę powiedzieć, jak zmodyfikować schemat, aby umożliwić obiekt z kluczem test
do przekazania (jak każdy z anyOf
podschematy temu zapobiegają).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Jeśli Twoim zamiarem jest sprawdzenie, czy jedna z wstawianych rzeczy ma test1
lub test2
, to obawiam się, że schemat JSON nie może ci pomóc. Schemat JSON w kontekście Mongo może sprawdzać każdy element indywidualnie i nie ma możliwości weryfikacji zbioru potencjalnie wstawionych rekordów.
W powyższym przykładowym schemacie usunąłem sprawdzanie typu, ponieważ nie jest to istotne dla tego pytania, a bsonType i tak różni się od typu schematu JSON.