Wie stelle ich fest, warum ein MongoDB-Dokument die Validierung nicht besteht?


12

Wie stelle ich fest, warum eine MongoDB-Dokumenteinfügung die Validierung nicht besteht? Alles, was ich zurück bekomme, ist ein writeError mit der Meldung "Dokument fehlgeschlagene Validierung", was nicht sehr hilfreich ist.

(Dies kommt häufig vor, und ich möchte verstehen, wie diese ordnungsgemäß debuggt werden, anstatt bei einem bestimmten Beispiel um Hilfe zu bitten.)

Antworten:


10

Wie bei MongoDB 3.2 gibt es keine Rückmeldung über den Grund, warum die Dokumentvalidierung fehlgeschlagen ist: Der Gesamtvalidierungsausdruck wird derzeit entweder als wahr ("OK") oder falsch ("Dokument fehlgeschlagene Validierung") ausgewertet. Das Validierungsverhalten kann mit den Konfigurationsoptionen validationAction(Fehler / Warnung) und validationLevel(Streng / Mittel / Aus) angepasst werden. Dies bietet jedoch keinen weiteren Kontext für Validierungsfehler.

Wenn Sie detaillierteres Feedback erhalten möchten, empfiehlt es sich, Ihrer Anwendung eine Validierungslogik hinzuzufügen, anstatt sich ausschließlich auf serverseitige Überprüfungen zu verlassen. Selbst bei der serverseitigen Validierung lassen sich viele Überprüfungen am besten in der Anwendungsgeschäftslogik durchführen, um Roundtrips zum Datenbankserver zu minimieren und dem Endbenutzer ein reaktionsfähigeres Feedback zu geben.

Beispielsweise sollten Benutzereingaben für eine Webanwendung (erforderliche Felder, Feldformate, ...) im Browser überprüft werden, bevor sie an Ihre Anwendung gesendet werden oder versucht wird, sie in die Datenbank einzufügen / zu aktualisieren.

Es ist jedoch sinnvoll, auf mehreren Ebenen zu validieren, um die Datenqualität sicherzustellen, und ein gewisser Kontext zur Diagnose von Validierungsfehlern wäre sehr nützlich. Es gibt eine relevante Anforderung für offene Funktionen, die Sie im MongoDB-Issue-Tracker sehen / abstimmen können: SERVER-20547: Geben Sie den Grund an, warum eine Operation die Dokumentvalidierung nicht besteht .

Für weitere Informationen interessieren Sie sich möglicherweise auch für die Dokumentvalidierung - Teil 1: Hinzufügen genau der richtigen Kontrolle über Ihre Dokumente . Dies hebt einige der allgemeinen Vor- und Nachteile der Dokumentenvalidierung wie in MongoDB 3.2 hervor und enthält eine Referenztabelle für das Ergebnis basierend auf validationActionund validationLevelKonfigurationsoptionen.


2
Vielen Dank! Ich schätze, ich habe hier nichts vermisst. Wir führen zwar den größten Teil unserer Validierung in unserer Anwendung durch, lassen jedoch als MongoDB-Validatoren Überprüfungen auf niedriger Ebene, hauptsächlich um sicherzustellen, dass unsere Softwareentwickler (und ich) während der Entwicklung keine Fehler verursachen, anstatt Benutzerfehler in der Produktion zu finden. Ich habe die JIRA hochgestimmt. Prost!
Jonathan Wheeler

Das Problem ist, dass das Schemaformat "semi-standard" ist, dh mit MongoDB-Erweiterungen. Daher ist es immer noch schwierig, die Ursache mithilfe von Standard-JSON-Schema-Validatoren herauszufinden.
Hendy Irawan

1
@HendyIrawan Ja, es gibt einige Erweiterungen des JSON-Schemas für MongoDB-Datentypen, sodass für eine strikte Validierung eine zusätzliche Client-Validierung oder -Transformation erforderlich wäre. Ich habe einige Beispiele wie mongo-schemerfür Node.js gesehen, das auf AJV (Another JSON Schema Validator) aufbaut .
Stennie

1

Natürlich ist die ursprüngliche Antwort richtig. Die Handhabung der Validierung vor dem Erreichen der Datenbank ist absolut empfehlenswert. Wenn Sie sie jedoch wie jetzt verfolgen müssen, können Sie die Validierung vorübergehend aus dem Schema entfernen und dann sehen, was angezeigt wird in der Sammlung.

Wenn ein Feld erforderlich war, es jedoch fehlt, leer oder unförmig ist, wird Ihre Suche zumindest eingeschränkt. Wenn die Daten richtig aussehen, sehen Sie sich die im Schema angegebenen Validierungen an.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.