sql >> Databáze >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf nefunguje

{test:"123"} se nezdaří ověření, protože neodpovídá žádnému ze schémat v anyOf , které potřebují test1 nebo test2 jako jediný klíč.

anyOf použije každé podschéma na vaši instanci a potvrdí platnost, pokud alespoň jedno z podschémat projde validací.

{test1: "123" } selže, protože kořenová schémata additionalProperties: false zabrání všem klíčům ve vašem objektu, které nejsou definovány ve STEJNÉM objektu schématu properties nebo patternProperties .

Řešením je mít nějakou duplikaci.

In THIS příklad (odkaz je pro testování prohlížeče, ale pouze draft-7), přidal jsem kořenové vlastnosti test1 a test2 . To umožní data, kde máte klíč test1 nebo test2 projít, ale vzhledem k tomu, že neznám vaše požadavky, nemohu vám říci, jak upravit schéma tak, aby umožňovalo objekt s klíčem test předat (jako každý z anyOf tomu brání podschémata).

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

Pokud je vaším záměrem zkontrolovat, zda jedna z věcí, které vkládáte, má test1 nebo test2 , pak se obávám, že schéma JSON vám nemůže pomoci. Schéma JSON v kontextu Mongo může kontrolovat každou položku pouze jednotlivě a nemá možnost ověřit kolekci potenciálně vložených záznamů.

Ve výše uvedeném vzorovém schématu jsem odstranil kontrolu typu, protože to není pro tuto otázku relevantní a bsonType se stejně liší od typu schématu JSON.




  1. Kolekce Mongodb jako dynamická

  2. Jak přejmenovat cestu v reakci na naplnění

  3. MongoDB $acos

  4. Nodejs - modul websocket-node:Jak zajistit, aby multiklientský socket-server fungoval?