Como determino por que um documento do MongoDB está com falha na validação?

13

Como determino por que uma inserção de documento do MongoDB está falhando na validação? Tudo o que recebo é um writeError que diz "Falha na validação do documento", o que não ajuda muito.

(Isso acontece frequentemente, e eu gostaria de entender como depurá-las adequadamente, em vez de pedir ajuda com um exemplo específico.)

Jonathan Wheeler
fonte

Respostas:

10

Como no MongoDB 3.2, não há comentários sobre o motivo da falha na validação do documento: a expressão geral de validação atualmente é avaliada como Verdadeiro ("OK") ou Falso ("Falha na validação do documento"). O comportamento da validação pode ser ajustado com as opções de configuração validationAction(erro / aviso) e validationLevel(estrito / moderado / desativado), mas isso não fornece nenhum contexto adicional para falhas na validação.

Se você deseja obter um feedback mais detalhado, a abordagem recomendada seria adicionar lógica de validação ao seu aplicativo, em vez de confiar apenas nas verificações do servidor. Mesmo com a validação do lado do servidor, muitas verificações são mais bem executadas na lógica de negócios do aplicativo para minimizar as viagens de ida e volta ao servidor de banco de dados e fornecer feedback mais responsivo ao usuário final.

Por exemplo, a entrada do usuário para um aplicativo Web (campos obrigatórios, formatos de campo, ...) deve ser validada no navegador antes de ser enviada ao seu aplicativo ou tentar inserir / atualizar no banco de dados.

No entanto, faz sentido validar em vários níveis para garantir a qualidade dos dados e algum contexto para diagnosticar falhas de validação seria muito útil. Há uma solicitação de recurso aberto relevante que você pode assistir / votar no rastreador de problemas do MongoDB: SERVER-20547: exponha o motivo pelo qual uma operação falha na validação do documento .

Para obter mais informações, também pode estar interessado em Validação de documentos - Parte 1: Adicionando a quantidade certa de controle sobre seus documentos . Isso destaca alguns dos prós e contras gerais de validação de documentos como no MongoDB 3.2, e inclui uma tabela de referência para o resultado com base em validationActione validationLevelopções de configuração.

Stennie
fonte
2
Obrigado! Acho que não estava faltando nada aqui. Realmente fazemos a maior parte de nossa validação em nosso aplicativo, mas deixamos verificações de baixo nível como validadores do MongoDB, principalmente para garantir que nossos engenheiros de software (e eu) não estejam criando bugs durante o desenvolvimento, em vez de encontrar erros do usuário na produção. Votei no JIRA. Felicidades!
Jonathan Wheeler
O problema é que o formato do esquema é "semi-padrão", ou seja, com extensões MongoDB, por isso ainda é difícil descobrir qual é a causa usando os validadores JSON Schema padrão.
Hendy Irawan
11
@HendyIrawan Sim, existem algumas extensões nos tipos de dados JSON Schema for MongoDB, portanto, validação ou transformação adicional do cliente seria necessária para uma validação estrita. Eu já vi alguns exemplos, como o mongo-schemerNode.js, que se baseia no AJV (outro validador de esquema JSON) .
Stennie 25/05
1

É claro que a resposta original está correta, lidar com a validação antes de chegar ao banco de dados é absolutamente uma prática recomendada, mas como uma questão prática, se você precisar examiná-la como agora, pode remover temporariamente a validação do esquema e ver o que mostra na coleção.

Se um campo foi obrigatório, mas ele aparece ausente, vazio ou deformado, pelo menos, restringe sua pesquisa. Se os dados parecerem corretos, verifique as validações especificadas no Esquema.

Serexx
fonte