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 é muito útil.
(Isso acontece com frequência e gostaria de entender como depurá-los corretamente, em vez de pedir ajuda com um exemplo específico.)
Como no MongoDB 3.2, não há feedback sobre o motivo da falha na validação do documento: a expressão de validação geral atualmente é avaliada como True ("OK") ou False ("Falha na validação do documento"). O comportamento de validação pode ser ajustado com as opções de configuração
validationAction
(erro/aviso) evalidationLevel
(estrito/moderado/desativado), mas isso não fornece nenhum contexto adicional para falhas de 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 depender apenas de verificações do lado do servidor. Mesmo com a validação do lado do servidor, muitas verificações são feitas melhor na lógica de negócios do aplicativo para minimizar 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 da 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 aberta relevante que você pode observar/votar no rastreador de problemas do MongoDB: SERVER-20547: Expor o motivo pelo qual uma operação falha na validação do documento .
Para obter mais informações, você 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 da validação de documentos como no MongoDB 3.2 e inclui uma tabela de referência para o resultado com base em opções
validationAction
devalidationLevel
configuração.É claro que a resposta original está certa, manipular a validação antes de chegar ao banco de dados é absolutamente a melhor prática, mas, por uma questão prática, se você precisar persegui-la como agora, poderá remover temporariamente a validação do esquema e ver o que mostra na Coleção.
Se um campo for obrigatório, mas aparecer ausente, vazio ou disforme, pelo menos ele restringe sua pesquisa. Se os dados parecerem corretos, dê uma olhada nas validações especificadas no Esquema.