{test:"123"}
échoue à la validation car il n'est conforme à aucun des schémas de anyOf
, qui ont besoin de test1
ou test2
comme seule clé.
anyOf
applique chaque sous-schéma à votre instance et affirme valide si au moins l'un des sous-schémas passe la validation.
{test1: "123" }
échoue car les schémas racine additionalProperties: false
empêche toutes les clés de votre objet non définies dans l'objet de schéma SAME properties
ou patternProperties
.
La solution est d'avoir des doublons.
In THIS
exemple (le lien est pour les tests de navigateur mais brouillon-7 uniquement), j'ai ajouté les propriétés racine test1
et test2
. Cela autorisera les données où vous avez une clé de test1
ou test2
pour passer, mais étant donné que je ne connais pas vos exigences, je ne peux pas vous dire comment modifier le schéma pour autoriser un objet avec une clé de test
passer (comme chacun des anyOf
les sous-schémas l'en empêchent).
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Si votre intention est de vérifier que l'une des choses que vous insérez a test1
ou test2
, alors je crains que JSON Schema ne puisse pas vous aider. Le schéma JSON dans le contexte de Mongo ne peut vérifier chaque élément qu'individuellement et n'a pas la possibilité de valider une collection d'enregistrements potentiellement insérés.
Dans l'exemple de schéma ci-dessus, j'ai supprimé la vérification de type car cela n'est pas pertinent pour cette question, et bsonType diffère de toute façon du type de schéma JSON.