如何确定 MongoDB 文档验证失败的原因?

Jon*_*ler 18 mongodb debugging data-validation

如何确定 MongoDB 文档插入验证失败的原因?我得到的只是一个写着“文档验证失败”的 writeError,这不是很有帮助。

(这种情况经常发生,我想了解如何正确调试这些,而不是寻求特定示例的帮助。)

Ste*_*nie 14

在 MongoDB 3.2 中,没有关于文档验证失败原因的反馈:整体验证表达式当前评估为 True(“OK”)或 False(“文档验证失败”)。可以使用validationAction(error/warn) 和validationLevel(strict/moderate/off) 配置选项调整验证行为,但这不会为验证失败提供任何进一步的上下文。

如果您想获得更详细的反馈,推荐的方法是将验证逻辑添加到您的应用程序中,而不是仅依赖于服务器端检查。即使使用服务器端验证,最好在应用程序业务逻辑中完成许多检查,以最大限度地减少到数据库服务器的往返次数,并为最终用户提供更具响应性的反馈。

例如,Web 应用程序的用户输入(必填字段、字段格式等)应在提交给应用程序或尝试在数据库中插入/更新之前在浏览器中进行验证。

但是,在多个级别进行验证以确保数据质量确实有意义,并且诊断验证失败的一些上下文将非常有用。有一个相关的开放功能请求,您可以在 MongoDB 问题跟踪器中观看/投票:SERVER-20547: Expose the reason an operation failed document validation

有关更多信息,您可能还对文档验证 - 第 1 部分:文档添加适当的控制量感兴趣。这突出了 MongoDB 3.2 中文档验证的一些一般优缺点,并包括基于validationActionvalidationLevel配置选项的结果的参考表。

  • 谢谢!猜猜我在这里没有遗漏任何东西。我们确实在我们的应用程序中进行了大部分验证,但我们将低级检查作为 MongoDB 验证器,主要是为了确保我们的软件工程师(和我自己)不会在开发过程中创建错误,而不是在生产中发现用户错误。我对 JIRA 投了赞成票。干杯! (2认同)