MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf funktioniert nicht

{test:"123"} schlägt bei der Validierung fehl, da es keinem der Schemas in anyOf entspricht , die test1 benötigen oder test2 als einziger Schlüssel.

anyOf Wendet jedes Unterschema auf Ihre Instanz an und behauptet gültig, wenn mindestens eines der Unterschemas die Validierung besteht.

{test1: "123" } schlägt fehl, weil die Stammschemas additionalProperties: false verhindert alle Schlüssel in Ihrem Objekt, die nicht in den properties des GLEICHEN Schemaobjekts definiert sind oder patternProperties .

Die Lösung besteht darin, einige Duplikate zu haben.

In THIS Beispiel (der Link ist für das Testen im Browser, aber nur Draft-7), habe ich die Root-Eigenschaften test1 hinzugefügt und test2 . Dadurch werden Daten zugelassen, bei denen Sie einen Schlüssel von test1 haben oder test2 zu bestehen, aber da ich Ihre Anforderungen nicht kenne, kann ich Ihnen nicht sagen, wie Sie das Schema ändern müssen, um ein Objekt mit einem Schlüssel von test zuzulassen zu übergeben (wie jeder der anyOf Subschemas verhindern dies).

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

Wenn Sie überprüfen möchten, ob eines der Dinge, die Sie einfügen, test1 enthält oder test2 , dann befürchte ich, dass JSON Schema Ihnen nicht helfen kann. Das JSON-Schema im Kontext von Mongo kann nur jedes Element einzeln prüfen und hat nicht die Möglichkeit, eine Sammlung potenziell eingefügter Datensätze zu validieren.

Im obigen Beispielschema habe ich die Typprüfung entfernt, da dies für diese Frage nicht relevant ist und bsonType sowieso vom Typ des JSON-Schemas abweicht.