MongoDBドキュメントが検証に失敗した理由を確認するにはどうすればよいですか?


13

MongoDBドキュメントの挿入が検証に失敗した理由を判断するにはどうすればよいですか?返されるのは、「ドキュメントの検証に失敗しました」というwriteErrorだけです。これはあまり役に立ちません。

(これは頻繁に発生します。特定の例について助けを求めるのではなく、これらを適切にデバッグする方法を理解したいと思います。)

回答:


10

MongoDB 3.2と同様、ドキュメントの検証が失敗した理由に関するフィードバックはありません。現在、検証式全体はTrue( "OK")またはFalse( "Document failed validation")として評価されています。検証動作は、validationAction(エラー/警告)およびvalidationLevel(厳格/中程度/オフ)構成オプションで調整できますが、これは検証エラーのコンテキストを提供しません。

より詳細なフィードバックが必要な場合、推奨されるアプローチは、サーバー側のチェックだけに依存するのではなく、アプリケーションに検証ロジックを追加することです。サーバー側の検証を行う場合でも、データベースサーバーへのラウンドトリップを最小限に抑え、エンドユーザーに応答性の高いフィードバックを提供するために、多くのチェックはアプリケーションビジネスロジックで行うのが最適です。

たとえば、Webアプリのユーザー入力(必須フィールド、フィールド形式など)は、アプリケーションに送信する前、またはデータベースに挿入/更新する前に、ブラウザーで検証する必要があります。

ただし、データの品質を保証するために複数のレベルで検証することには意味があり、検証の失敗を診断するためのコンテキストは非常に役立ちます。MongoDBの課題トラッカーで監視/賛成投票できる関連するオープン機能リクエストがあります:SERVER-20547:操作がドキュメントの検証に失敗した理由を明らかにします

詳細については、「ドキュメントの検証-パート1:ドキュメントを適切に制御する」を参照してください。これは、MongoDB 3.2におけるドキュメント検証の一般的な長所と短所のいくつかを強調しvalidationActionvalidationLevel設定オプションに基づく結果の参照表を含みます。


2
ありがとう!ここには何も欠けていなかったと思います。実際、ほとんどの検証はアプリケーションで行いますが、低レベルのチェックはMongoDB検証ツールとして残し、主にソフトウェアエンジニア(および私)が開発中にバグを作成していないことを確認します。本番環境でユーザーエラーを見つけるためではありません。JIRAに賛成票を投じました。乾杯!
ジョナサンウィーラー

問題は、スキーマの形式が「準標準」、つまりMongoDB拡張を使用しているため、標準のJSONスキーマバリデーターを使用して原因を特定するのが難しいことです。
ヘンディイラワン

1
@HendyIrawanはい、MongoDBデータ型のJSONスキーマにはいくつかの拡張機能があるため、厳密な検証には追加のクライアント検証または変換が必要になります。AJV(Another JSON Schema Validator)mongo-schemer基づいて構築されたNode.jsのような例をいくつか見ました。
Stennie、2018年

1

もちろん、元の答えは正しいですが、dbに到達する前に検証を処理することが絶対にベストプラクティスですが、今のように追跡する必要がある場合は、スキーマから検証を一時的に削除して、何が表示されるかを確認できます。コレクションでアップ。

フィールドが必須であるが、欠落、空、または奇形が表示されている場合、少なくとも検索範囲が狭くなります。データが正しい場合は、スキーマで指定されている検証を確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.