Как и в MongoDB 3.2, обратной связи о причине неудачной проверки документа нет: общее выражение проверки в настоящее время оценивается как True («ОК») или False («Проверка документа не пройдена»). Поведение проверки может быть изменено с помощью параметров конфигурации validationAction
(ошибка / предупреждение) и validationLevel
(строго / умеренно / выключено), но это не обеспечивает дополнительного контекста для ошибок проверки.
Если вы хотите получить более подробный отзыв, рекомендуется добавить логику проверки в ваше приложение, а не полагаться только на проверки на стороне сервера. Даже при проверке на стороне сервера многие проверки лучше всего выполнять в бизнес-логике приложения, чтобы минимизировать количество обращений к серверу базы данных и обеспечить более оперативную обратную связь с конечным пользователем.
Например, пользовательский ввод для веб-приложения (обязательные поля, форматы полей и т. Д.) Должен быть проверен в браузере перед его отправкой в приложение или попыткой вставить / обновить базу данных.
Тем не менее, имеет смысл проводить валидацию на нескольких уровнях, чтобы гарантировать качество данных, и некоторый контекст для диагностики сбоев валидации будет очень полезным. Существует релевантный запрос на открытую функцию, который вы можете просмотреть / проголосовать в системе отслеживания проблем MongoDB: SERVER-20547: Укажите причину, по которой операция не прошла проверку документа .
Для получения дополнительной информации вас также может заинтересовать проверка документов - часть 1: добавление только необходимого количества контроля над вашими документами . Это подчеркивает некоторые общие плюсы и минусы валидации документов, как в MongoDB 3.2, и включает справочную таблицу для результатов, основанных на validationAction
и validationLevel
опциях конфигурации.
mongo-schemer
для Node.js, который основан на AJV (Другой JSON Schema Validator) .Конечно, оригинальный ответ правильный, обработка проверки до прибытия в БД - это абсолютно лучшая практика, но на практике, если вам нужно отследить ее, как сейчас, вы можете временно удалить проверку из схемы, а затем посмотреть, что показывает в коллекции.
Если поле было обязательным, но оно отображается как пропущенное, пустое или деформированное, по крайней мере это сужает ваш поиск. Если данные выглядят правильно, взгляните на проверки, указанные в схеме.
источник