sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf fungerar inte

{test:"123"} misslyckas med valideringen eftersom den inte överensstämmer med något av schemana i anyOf , som behöver test1 eller test2 som den enda nyckeln.

anyOf tillämpar varje underschema på din instans och hävdar giltigt om minst ett av underschemana klarar valideringen.

{test1: "123" } misslyckas eftersom rotschemat additionalProperties: false förhindrar alla nycklar i ditt objekt som inte är definierade i SAME schemaobjektets properties eller patternProperties .

Lösningen är att ha lite dubbelarbete.

In THIS exempel (länken är för webbläsartestning men endast draft-7), jag har lagt till rotegenskaper test1 och test2 . Detta tillåter data där du har nyckeln test1 eller test2 att godkänna, men eftersom jag inte känner till dina krav kan jag inte berätta hur du ändrar schemat för att tillåta ett objekt med nyckeln test att passera (som var och en av anyOf underscheman förhindrar det).

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

Om din avsikt är att kontrollera att en av sakerna du infogar har test1 eller test2 , då är jag rädd att JSON Schema inte kan hjälpa dig. JSON Schema i Mongo-sammanhang kan endast kontrollera varje objekt individuellt och har inte möjlighet att validera en samling potentiellt infogade poster.

I exemplet ovan har jag tagit bort typkontroll eftersom det inte är relevant för den här frågan, och bsonType skiljer sig ändå från JSON Schema-typen.




  1. mongodb får tillgång till underdokument

  2. Hur ansluter man till en annan MongoDB-databas som superanvändare med NodeJS?

  3. Torkar upp en generisk RedisTemplate våren 4

  4. Hur man tar bort N antal dokument i mongodb