sql >> Database >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf werkt niet

{test:"123"} validatie mislukt omdat het niet voldoet aan een van de schema's in anyOf , die test1 . nodig hebben of test2 als de enige sleutel.

anyOf past elk subschema toe op uw instantie en beweert geldig te zijn als ten minste één van de subschema's de validatie doorstaat.

{test1: "123" } mislukt omdat de hoofdschema's additionalProperties: false voorkomt sleutels in uw object die niet zijn gedefinieerd in het SAME-schemaobject properties of patternProperties .

De oplossing is om wat duplicatie te hebben.

In THIS voorbeeld (link is voor browsertests maar alleen draft-7), ik heb root-eigenschappen toegevoegd test1 en test2 . Dit zal gegevens toestaan ​​waarbij u een sleutel van test1 . heeft of test2 slagen, maar aangezien ik uw vereisten niet ken, kan ik u niet vertellen hoe u het schema moet wijzigen om een ​​object met een sleutel van test toe te staan door te geven (zoals elk van de anyOf subschema's voorkomen dit).

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "_id": {},
    "test": {},
    "test1": {},
    "test2": {}
  },
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "test1": {}
      },
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "test2": {}
      },
      "additionalProperties": false
    }
  ]
}

Als het uw bedoeling is om te controleren of een van de dingen die u invoert test1 . heeft of test2 , dan ben ik bang dat JSON Schema je niet kan helpen. JSON Schema in de context van Mongo kan elk item alleen afzonderlijk controleren en heeft niet de mogelijkheid om een ​​verzameling mogelijk ingevoegde records te valideren.

In het bovenstaande voorbeeldschema heb ik typecontrole verwijderd omdat dat niet relevant is voor deze vraag, en bsonType verschilt sowieso van het JSON-schematype.




  1. Mongodb java:Perist POJO-klasse met generiek veld

  2. Vul specifieke velden in $lookup

  3. WriteConcern van MongoDB Java-client werkt niet

  4. Mongo-go-driver-fout Nieuwe clientfout ClientOptions in argument voor mongo.NewClient