Jonathan Wheeler Asked: 2016-08-23 15:38:19 +0800 CST2016-08-23 15:38:19 +0800 CST 2016-08-23 15:38:19 +0800 CST 如何确定 MongoDB 文档验证失败的原因? 772 如何确定 MongoDB 文档插入验证失败的原因?我得到的只是一个 writeError,上面写着“文档验证失败”,这不是很有帮助。 (这种情况经常发生,我想了解如何正确调试这些,而不是寻求特定示例的帮助。) mongodb debugging 2 个回答 Voted Best Answer Stennie 2016-08-23T16:46:17+08:002016-08-23T16:46:17+08:00 在 MongoDB 3.2 中,没有关于文档验证失败原因的反馈:整体验证表达式当前评估为 True(“OK”)或 False(“文档验证失败”)。validationAction可以使用(error/warn) 和(strict/moderate/off) 配置选项调整验证行为validationLevel,但这不会为验证失败提供任何进一步的上下文。 如果您想获得更详细的反馈,推荐的方法是将验证逻辑添加到您的应用程序中,而不是仅仅依赖服务器端检查。即使使用服务器端验证,最好在应用程序业务逻辑中完成许多检查,以尽量减少到数据库服务器的往返行程,并为最终用户提供更具响应性的反馈。 例如,Web 应用程序的用户输入(必填字段、字段格式等)应在浏览器中验证,然后再提交到您的应用程序或尝试在数据库中插入/更新。 但是,在多个级别进行验证以确保数据质量确实很有意义,并且诊断验证失败的一些上下文将非常有用。您可以在 MongoDB 问题跟踪器中观看/投票支持相关的开放功能请求:SERVER-20547: Expose the reason an operation failed document validation。 有关更多信息,您可能还对文档验证 - 第 1 部分:对您的文档添加适量的控制感兴趣。这突出了 MongoDB 3.2 中文档验证的一些一般优点和缺点,并包括基于validationAction和validationLevel配置选项的结果参考表。 Serexx 2018-07-14T11:15:49+08:002018-07-14T11:15:49+08:00 当然最初的答案是正确的,在到达数据库之前处理验证绝对是最佳实践,但实际上,如果您需要像现在一样追查它,您可以暂时从 Schema 中删除验证,然后查看显示的内容在集合中。 如果一个字段是必需的,但它显示为缺失、空白或畸形,至少它会缩小您的搜索范围。如果数据看起来正确,请查看 Schema 中指定的验证。
在 MongoDB 3.2 中,没有关于文档验证失败原因的反馈:整体验证表达式当前评估为 True(“OK”)或 False(“文档验证失败”)。
validationAction
可以使用(error/warn) 和(strict/moderate/off) 配置选项调整验证行为validationLevel
,但这不会为验证失败提供任何进一步的上下文。如果您想获得更详细的反馈,推荐的方法是将验证逻辑添加到您的应用程序中,而不是仅仅依赖服务器端检查。即使使用服务器端验证,最好在应用程序业务逻辑中完成许多检查,以尽量减少到数据库服务器的往返行程,并为最终用户提供更具响应性的反馈。
例如,Web 应用程序的用户输入(必填字段、字段格式等)应在浏览器中验证,然后再提交到您的应用程序或尝试在数据库中插入/更新。
但是,在多个级别进行验证以确保数据质量确实很有意义,并且诊断验证失败的一些上下文将非常有用。您可以在 MongoDB 问题跟踪器中观看/投票支持相关的开放功能请求:SERVER-20547: Expose the reason an operation failed document validation。
有关更多信息,您可能还对文档验证 - 第 1 部分:对您的文档添加适量的控制感兴趣。这突出了 MongoDB 3.2 中文档验证的一些一般优点和缺点,并包括基于
validationAction
和validationLevel
配置选项的结果参考表。当然最初的答案是正确的,在到达数据库之前处理验证绝对是最佳实践,但实际上,如果您需要像现在一样追查它,您可以暂时从 Schema 中删除验证,然后查看显示的内容在集合中。
如果一个字段是必需的,但它显示为缺失、空白或畸形,至少它会缩小您的搜索范围。如果数据看起来正确,请查看 Schema 中指定的验证。