web-dev-qa-db-fra.com

Comment déterminer pourquoi un document MongoDB échoue à la validation?

Comment déterminer pourquoi une insertion de document MongoDB échoue à la validation? Tout ce que je reçois est une writeError qui dit "Échec de la validation du document", ce qui n'est pas très utile.

(Cela se produit souvent et j'aimerais comprendre comment les déboguer correctement, plutôt que de demander de l'aide avec un exemple spécifique.)

13
Jonathan Wheeler

Comme dans MongoDB 3.2, il n'y a aucun retour sur la raison de l'échec de la validation du document: l'expression de validation globale est actuellement évaluée comme True ("OK") ou False ("Document failed validation"). Le comportement de validation peut être ajusté avec les options de configuration validationAction (erreur/avertissement) et validationLevel (strict/modéré/désactivé), mais cela ne fournit pas de contexte supplémentaire pour les échecs de validation.

Si vous souhaitez obtenir des commentaires plus détaillés, l'approche recommandée serait d'ajouter une logique de validation à votre application plutôt que de vous fier uniquement aux vérifications côté serveur. Même avec la validation côté serveur, de nombreux contrôles sont mieux effectués dans la logique métier de l'application pour minimiser les allers-retours vers le serveur de base de données et fournir des commentaires plus réactifs à l'utilisateur final.

Par exemple, les entrées utilisateur pour une application web (champs obligatoires, formats de champs, ...) doivent être validées dans le navigateur avant d'être soumises à votre application ou de tenter d'insérer/mettre à jour dans la base de données.

Cependant, il est logique de valider à plusieurs niveaux pour garantir la qualité des données et un contexte pour diagnostiquer les échecs de validation serait très utile. Il existe une demande de fonctionnalité ouverte pertinente que vous pouvez regarder/voter dans le suivi des problèmes de MongoDB: SERVER-20547: Exposez la raison pour laquelle une opération échoue à la validation du document .

Pour plus d'informations, vous pouvez également être intéressé par Validation de documents - Partie 1: Ajouter juste la bonne quantité de contrôle sur vos documents . Cela met en évidence certains des avantages et inconvénients généraux de la validation de documents comme dans MongoDB 3.2, et comprend un tableau de référence pour le résultat basé sur les options de configuration validationAction et validationLevel.

10
Stennie

Bien sûr, la réponse originale est correcte, la gestion de la validation avant d'arriver à la base de données est absolument la meilleure pratique, mais en pratique, si vous devez la poursuivre comme maintenant, vous pouvez temporairement supprimer la validation du schéma et voir ce qui s'affiche dans la Collection.

Si un champ était requis mais qu'il apparaît manquant, vide ou déformé au moins, il restreint votre recherche. Si les données semblent correctes, consultez les validations spécifiées dans le schéma.

1
Serexx