MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Convalida schema Mongo Json AnyOf non funzionante

{test:"123"} non riesce la convalida perché non è conforme a nessuno degli schemi in anyOf , che richiedono test1 o test2 come unica chiave.

anyOf applica ogni sottoschema alla tua istanza e si dichiara valido se almeno uno dei sottoschemi supera la convalida.

{test1: "123" } non riesce perché gli schemi radice additionalProperties: false impedisce qualsiasi chiave nel tuo oggetto non definita nelle properties dell'oggetto SAME schema o patternProperties .

La soluzione è avere qualche duplicazione.

In THIS esempio (il collegamento è per il test del browser ma solo per la bozza-7), ho aggiunto le proprietà radice test1 e test2 . Ciò consentirà i dati in cui hai una chiave di test1 o test2 per passare, ma dato che non conosco le tue esigenze, non posso dirti come modificare lo schema per consentire un oggetto con una chiave di test passare (come ciascuno dei anyOf i sottoschemi lo impediscono).

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

Se il tuo intento è verificare che una delle cose che stai inserendo abbia test1 o test2 , quindi temo che JSON Schema non possa aiutarti. Schema JSON nel contesto di Mongo può solo controllare ogni elemento individualmente e non ha la possibilità di convalidare una raccolta di record potenzialmente inseriti.

Nello schema di esempio sopra, ho rimosso il controllo del tipo perché non è rilevante per questa domanda e bsonType è comunque diverso dal tipo di schema JSON.