MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf ne fonctionne pas

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