MongoDBドキュメントの挿入が検証に失敗した理由を判断するにはどうすればよいですか?返されるのは、「ドキュメントの検証に失敗しました」というwriteErrorだけです。これはあまり役に立ちません。
(これは頻繁に発生します。特定の例について助けを求めるのではなく、これらを適切にデバッグする方法を理解したいと思います。)
MongoDBドキュメントの挿入が検証に失敗した理由を判断するにはどうすればよいですか?返されるのは、「ドキュメントの検証に失敗しました」というwriteErrorだけです。これはあまり役に立ちません。
(これは頻繁に発生します。特定の例について助けを求めるのではなく、これらを適切にデバッグする方法を理解したいと思います。)
回答:
MongoDB 3.2と同様、ドキュメントの検証が失敗した理由に関するフィードバックはありません。現在、検証式全体はTrue( "OK")またはFalse( "Document failed validation")として評価されています。検証動作は、validationAction
(エラー/警告)およびvalidationLevel
(厳格/中程度/オフ)構成オプションで調整できますが、これは検証エラーのコンテキストを提供しません。
より詳細なフィードバックが必要な場合、推奨されるアプローチは、サーバー側のチェックだけに依存するのではなく、アプリケーションに検証ロジックを追加することです。サーバー側の検証を行う場合でも、データベースサーバーへのラウンドトリップを最小限に抑え、エンドユーザーに応答性の高いフィードバックを提供するために、多くのチェックはアプリケーションビジネスロジックで行うのが最適です。
たとえば、Webアプリのユーザー入力(必須フィールド、フィールド形式など)は、アプリケーションに送信する前、またはデータベースに挿入/更新する前に、ブラウザーで検証する必要があります。
ただし、データの品質を保証するために複数のレベルで検証することには意味があり、検証の失敗を診断するためのコンテキストは非常に役立ちます。MongoDBの課題トラッカーで監視/賛成投票できる関連するオープン機能リクエストがあります:SERVER-20547:操作がドキュメントの検証に失敗した理由を明らかにします。
詳細については、「ドキュメントの検証-パート1:ドキュメントを適切に制御する」を参照してください。これは、MongoDB 3.2におけるドキュメント検証の一般的な長所と短所のいくつかを強調しvalidationAction
、validationLevel
設定オプションに基づく結果の参照表を含みます。
mongo-schemer
に基づいて構築されたNode.jsのような例をいくつか見ました。