¿Cómo determino por qué un documento de MongoDB falla en la validación?

13

¿Cómo determino por qué una inserción de documento de MongoDB falla en la validación? Todo lo que obtengo es un error de escritura que dice "Validación de documento fallida", que no es muy útil.

(Esto sucede a menudo, y me gustaría entender cómo depurarlos correctamente, en lugar de pedir ayuda con un ejemplo específico).

Jonathan Wheeler
fuente

Respuestas:

10

Al igual que en MongoDB 3.2, no hay comentarios sobre la razón por la que falló la validación del documento: la expresión de validación general actualmente se evalúa como Verdadero ("OK") o Falso ("Validación fallida del documento"). El comportamiento de validación se puede ajustar con las opciones de configuración validationAction(error / advertencia) y validationLevel(estricto / moderado / apagado), pero esto no proporciona ningún contexto adicional para fallas de validación.

Si desea obtener comentarios más detallados, el enfoque recomendado sería agregar lógica de validación a su aplicación en lugar de confiar únicamente en las comprobaciones del lado del servidor. Incluso con la validación del lado del servidor, muchas comprobaciones se realizan mejor en la lógica empresarial de la aplicación para minimizar los viajes de ida y vuelta al servidor de la base de datos y proporcionar comentarios más receptivos al usuario final.

Por ejemplo, la entrada del usuario para una aplicación web (campos obligatorios, formatos de campo, ...) debe validarse en el navegador antes de enviarla a su aplicación o intentar insertarla / actualizarla en la base de datos.

Sin embargo, tiene sentido validar en múltiples niveles para garantizar la calidad de los datos y sería muy útil algún contexto para diagnosticar fallas de validación. Hay una solicitud de función abierta relevante que puede ver / votar en el rastreador de problemas de MongoDB: SERVER-20547: exponga la razón por la cual una operación falla en la validación del documento .

Para obtener más información, también puede estar interesado en Validación de documentos - Parte 1: Agregar la cantidad justa de control sobre sus documentos . Esto pone de relieve algunos de los pros y contras generales de validación de documentos como en MongoDB 3.2, e incluye una tabla de referencia para el resultado basado en validationActiony validationLevelopciones de configuración.

Stennie
fuente
2
¡Gracias! Supongo que no me faltaba nada aquí. De hecho, hacemos la mayor parte de nuestra validación en nuestra aplicación, pero dejamos verificaciones de bajo nivel como validadores de MongoDB, principalmente para asegurarnos de que nuestros ingenieros de software (y yo) no estamos creando errores durante el desarrollo, en lugar de encontrar errores de los usuarios en la producción. He votado a favor de la JIRA. ¡Salud!
Jonathan Wheeler
El problema es que el formato del esquema es "semi-estándar", es decir, con extensiones MongoDB, por lo que todavía es difícil descubrir cuál es la causa usando validadores de esquema JSON estándar.
Hendy Irawan
1
@HendyIrawan Sí, hay algunas extensiones del esquema JSON para los tipos de datos MongoDB, por lo que se requeriría una validación o transformación de cliente adicional para una validación estricta. He visto algunos ejemplos como mongo-schemerNode.js, que se basa en AJV (otro validador de esquemas JSON) .
Stennie
1

Por supuesto, la respuesta original es correcta, manejar la validación antes de llegar a la base de datos es absolutamente una mejor práctica, pero como cuestión práctica si necesita perseguirlo como ahora, puede eliminar temporalmente la validación del Esquema y luego ver lo que se muestra arriba en la colección.

Si se requería un campo pero aparece perdido, vacío o deforme, al menos, reduce su búsqueda. Si los datos se ven bien, eche un vistazo a las validaciones especificadas en el Esquema.

Serexx
fuente