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