MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf nie działa

{test:"123"} nie powiedzie się walidacja, ponieważ nie jest zgodny z żadnym ze schematów w anyOf , które wymagają test1 lub test2 jako jedyny klucz.

anyOf stosuje każdy schemat podrzędny do Twojej instancji i potwierdza poprawność, jeśli co najmniej jeden ze schematów podrzędnych przejdzie weryfikację.

{test1: "123" } nie powiedzie się, ponieważ schematy główne additionalProperties: false zapobiega wszelkim kluczom w twoim obiekcie, które nie są zdefiniowane w SAME obiekcie schematu properties lub patternProperties .

Rozwiązaniem jest pewne duplikowanie.

In THIS przykład (link jest do testowania przeglądarki, ale tylko draft-7), dodałem właściwości root test1 i test2 . Pozwoli to na dane, w których masz klucz test1 lub test2 do zaliczenia, ale biorąc pod uwagę, że nie znam twoich wymagań, nie mogę powiedzieć, jak zmodyfikować schemat, aby umożliwić obiekt z kluczem test do przekazania (jak każdy z anyOf podschematy temu zapobiegają).

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

Jeśli Twoim zamiarem jest sprawdzenie, czy jedna z wstawianych rzeczy ma test1 lub test2 , to obawiam się, że schemat JSON nie może ci pomóc. Schemat JSON w kontekście Mongo może sprawdzać każdy element indywidualnie i nie ma możliwości weryfikacji zbioru potencjalnie wstawionych rekordów.

W powyższym przykładowym schemacie usunąłem sprawdzanie typu, ponieważ nie jest to istotne dla tego pytania, a bsonType i tak różni się od typu schematu JSON.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. multi sum/count on mongodb (suma płci i suma wszystkich wyników)

  2. Jak wykonać dynamiczną liczbę kryteriów w mongoose.find?

  3. Nie można zainstalować doktryny mongodb w symfony2 z kompozytorem

  4. Zrozumienie Meteor Publish / Subskrybuj

  5. przekazywanie mangusty jako argumentu do funkcji