MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Validador de esquema Mongo Json AnyOf não está funcionando


{test:"123"} falha na validação porque não está em conformidade com nenhum dos esquemas em anyOf , que precisam de test1 ou test2 como a única chave.

anyOf aplica cada subesquema à sua instância e declara válido se pelo menos um dos subesquemas passar na validação.

{test1: "123" } falha porque os esquemas raiz additionalProperties: false impede quaisquer chaves em seu objeto não definidas no MESMO objeto de esquema properties ou patternProperties .

A solução é ter alguma duplicação.

In THIS exemplo (o link é para o teste do navegador, mas apenas draft-7), adicionei propriedades raiz test1 e test2 . Isso permitirá dados onde você tem uma chave de test1 ou test2 para passar, mas como não conheço seus requisitos, não posso dizer como modificar o esquema para permitir um objeto com uma chave de test passar (como cada um dos anyOf subesquemas o impedem).
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "_id": {},
    "test": {},
    "test1": {},
    "test2": {}
  },
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "test1": {}
      },
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "test2": {}
      },
      "additionalProperties": false
    }
  ]
}

Se sua intenção é verificar se uma das coisas que você está inserindo tem test1 ou test2 , temo que o JSON Schema não possa ajudá-lo. O esquema JSON no contexto do Mongo só pode verificar cada item individualmente e não tem a capacidade de validar uma coleção de registros potencialmente inseridos.

No esquema de exemplo acima, removi a verificação de tipo porque isso não é relevante para esta pergunta, e bsonType difere do tipo de esquema JSON de qualquer maneira.