Як визначити, чому документ MongoDB не проходить перевірку?


14

Як визначити, чому вкладка документа MongoDB не відповідає дійсності? Все, що я повертаю, - це WriteError, який говорить "Не вдалося перевірити документ", що не дуже корисно.

(Це трапляється часто, і я хотів би зрозуміти, як правильно налагодити їх, а не просити допомоги з конкретним прикладом.)

Відповіді:


11

Як і в MongoDB 3.2, відсутній зворотній зв'язок про причину невдалої перевірки документа: загальний вираз перевірки в даний час оцінюється як "True" ("ОК") або "False" ("Не вдалося перевірити документ"). Поведінка перевірки може бути відрегульована за допомогою validationAction( validationLevelпараметр конфігурації помилок / попередження) та (строгий / помірний / вимкнений), але це не надає жодного контексту для збоїв перевірки.

Якщо ви хочете отримати більш детальний зворотний зв'язок, рекомендованим підходом було б додати логіку перевірки у вашу програму, а не покладатися виключно на перевірки на стороні сервера. Навіть при валідації на стороні сервера, багато перевірок найкраще робити в бізнес-логіці додатків, щоб мінімізувати кругові поїздки до сервера баз даних і забезпечити більш чуйний зворотний зв'язок для кінцевого користувача.

Наприклад, користувальницьке введення для веб-програми (обов'язкові поля, формати полів ...) має бути перевірене у веб-переглядачі, перш ніж надсилатись у вашу заявку або намагатися вставити / оновити в базу даних.

Однак має сенс перевірити на декількох рівнях, щоб забезпечити якість даних та певний контекст для діагностики помилок перевірки було б дуже корисно. Існує відповідний запит на відкриту функцію, який ви можете дивитися / голосувати в трекері випуску MongoDB: SERVER-20547: Визначте причину операції не вдалося перевірити документ .

Для отримання додаткової інформації вас також може зацікавити перевірка документів - частина 1: Додавання лише потрібної кількості контролю над своїми документами . Це підкреслює деякі загальні плюси та мінуси перевірки документів на MongoDB 3.2 та включає довідкову таблицю результатів на основі validationActionта validationLevelпараметрів конфігурації.


2
Дякую! Зрозуміло, я тут нічого не пропускав. Ми дійсно робимо більшість перевірок у нашому додатку, але ми залишаємо перевірки низького рівня як валідатори MongoDB, здебільшого для того, щоб наші програмні інженери (і я) не створювали помилок під час розробки, а не знаходили помилки користувачів у виробництві. Я голосував JIRA. Ура!
Джонатан Вілер

Проблема полягає в тому, що формат схеми "напівстандартний", тобто з розширеннями MongoDB, тому все ще важко з'ясувати, в чому причина, використовуючи стандартні валідатори схеми JSON.
Хенді Іраван

1
@HendyIrawan Так, є кілька розширень до схеми JSON для типів даних MongoDB, тому для суворої перевірки знадобиться додаткова перевірка або трансформація клієнта. Я бачив декілька прикладів, таких як mongo-schemerNode.js, який базується на AJV (інший валідатор схем JSON) .
Стенні

1

Звичайно, оригінальна відповідь правильна, обробка валідації до приходу в db є абсолютно найкращою практикою, але, як практичне питання, якщо вам потрібно буде переслідувати її як зараз, ви можете тимчасово видалити перевірку зі схеми, а потім побачити, що показує в колекції.

Якщо поле було потрібне, але воно відображається відсутнім, порожнім або неправильним, принаймні це звужує ваш пошук. Якщо дані виглядають правильно, подивіться на валідації, визначені в Схемі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.