Jak ustalić, dlaczego dokument MongoDB nie sprawdza poprawności?

14

Jak ustalić, dlaczego nie można sprawdzić poprawności wstawienia dokumentu MongoDB? Wracam tylko błąd writeError z napisem „Sprawdzanie poprawności dokumentu nieudane”, co nie jest zbyt pomocne.

(Zdarza się to często i chciałbym zrozumieć, jak je poprawnie debugować, zamiast prosić o pomoc w konkretnym przykładzie).

Jonathan Wheeler
źródło

Odpowiedzi:

11

Podobnie jak w MongoDB 3.2, nie ma informacji zwrotnej na temat przyczyny niepowodzenia sprawdzania poprawności dokumentu: ogólne wyrażenie sprawdzania poprawności ma obecnie wartość Prawda („OK”) lub False („Sprawdzanie poprawności dokumentu”). Zachowanie sprawdzania poprawności można dostosować za pomocą opcji konfiguracyjnych validationAction(błąd / ostrzeżenie) i validationLevel(ścisłe / umiarkowane / wyłączone), ale nie zapewnia to dalszego kontekstu dla błędów sprawdzania poprawności.

Jeśli chcesz uzyskać bardziej szczegółowe informacje zwrotne, zalecanym podejściem byłoby dodanie logiki sprawdzania poprawności do aplikacji, a nie poleganie wyłącznie na kontrolach po stronie serwera. Nawet przy sprawdzaniu poprawności po stronie serwera, wiele sprawdzeń najlepiej jest wykonać w logice biznesowej aplikacji, aby zminimalizować liczbę podróży do serwera bazy danych w obie strony i zapewnić bardziej responsywne informacje zwrotne dla użytkownika końcowego.

Na przykład dane wprowadzone przez użytkownika dla aplikacji internetowej (wymagane pola, formaty pól, ...) powinny zostać sprawdzone w przeglądarce przed przesłaniem ich do aplikacji lub próbą wstawienia / aktualizacji w bazie danych.

Jednak sprawdzanie poprawności na wielu poziomach ma sens, aby zapewnić jakość danych, a pewien kontekst do diagnozowania błędów sprawdzania poprawności byłby bardzo przydatny. Istnieje odpowiednie otwarte żądanie funkcji, które można oglądać / głosować w górę w narzędziu do śledzenia problemów MongoDB: SERVER-20547: Podaj przyczynę niepowodzenia weryfikacji dokumentu .

Aby uzyskać więcej informacji, możesz być także zainteresowany sprawdzaniem poprawności dokumentów - Część 1: Dodawanie odpowiedniej kontroli nad dokumentami . Podkreśla to niektóre ogólne zalety i wady sprawdzania poprawności dokumentów, jak w MongoDB 3.2, i zawiera tabelę referencyjną wyników opartych na opcjach validationActioni validationLevelopcjach konfiguracji.

Stennie
źródło
2
Dzięki! Chyba niczego mi nie brakowało. Rzeczywiście wykonujemy większość sprawdzania poprawności w naszej aplikacji, ale zostawiamy kontrole niskiego poziomu jako weryfikatory MongoDB, głównie po to, aby upewnić się, że nasi inżynierowie oprogramowania (i ja) nie tworzą błędów podczas programowania, zamiast znajdować błędy użytkowników w produkcji. Podniosłem głos JIRA. Twoje zdrowie!
Jonathan Wheeler
Problem polega na tym, że format schematu jest „pół-standardowy”, tj. Z rozszerzeniami MongoDB, więc nadal trudno jest ustalić, co jest przyczyną przy użyciu standardowych walidatorów schematu JSON.
Hendy Irawan
1
@HendyIrawan Tak, istnieje kilka rozszerzeń schematu JSON dla typów danych MongoDB, więc wymagana będzie dodatkowa weryfikacja lub transformacja klienta dla ścisłej weryfikacji. Widziałem kilka przykładów takich jak mongo-schemerNode.js, który opiera się na AJV (Another JSON Schema Validator) .
Stennie
1

Oczywiście oryginalna odpowiedź jest prawidłowa, obsługa sprawdzania poprawności przed dotarciem do bazy danych jest absolutnie najlepszą praktyką, ale w praktyce, jeśli chcesz ją teraz ścigać, możesz tymczasowo usunąć sprawdzanie poprawności ze schematu, a następnie zobaczyć, co pokazuje w kolekcji.

Jeśli pole było wymagane, ale pokazuje brakujące, puste lub zniekształcone przynajmniej zawęża wyszukiwanie. Jeśli dane wyglądają poprawnie, spójrz na weryfikacje określone w schemacie.

Serexx
źródło