Answers:
与MongoDB 3.2一样,没有关于文档验证失败原因的反馈:当前,整个验证表达式的评估结果为“真”(“确定”)或“假”(“文档验证失败”)。可以使用validationAction
(错误/警告)和validationLevel
(严格/中等/关闭)配置选项来调整验证行为,但这不会为验证失败提供任何其他背景信息。
如果您希望获得更详细的反馈,建议的方法是将验证逻辑添加到您的应用程序中,而不是仅依赖于服务器端检查。即使使用服务器端验证,也最好在应用程序业务逻辑中进行许多检查,以最大程度地减少与数据库服务器的往返行程,并向最终用户提供响应更快的反馈。
例如,在将Web应用程序的用户输入(必填字段,字段格式等)提交给您的应用程序或尝试在数据库中插入/更新之前,应先在浏览器中对其进行验证。
但是,确实有必要在多个级别进行验证以确保数据质量,并且某些上下文来诊断验证失败将非常有用。您可以在MongoDB问题跟踪器中观察/投票赞成相关的开放功能请求:SERVER-20547:公开操作未能通过文档验证的原因。
有关更多信息,您可能还对文档验证-第1部分:添加对文档的适当控制量感兴趣。这突出显示了MongoDB 3.2上文档验证的一些一般利弊,并包括基于validationAction
和validationLevel
配置选项的结果参考表。
mongo-schemer
Node.js的示例,它基于AJV(另一个JSON模式验证器)。