with structuring how examples data collection validation mongodb

validation - structuring - ¿Cuál es la mejor manera de validar datos en mongo?



mongodb structuring data (5)

¿Cuál es la mejor manera de validar los datos que se insertan o actualizan en MongoDB? ¿Es para escribir algún tipo de código ejecutado por el servidor que haga la validación?


Creo que sería normal que tu aplicación maneje este tipo de cosas. Si los datos no son válidos de alguna manera, no permita que se agreguen al almacén de datos hasta que el usuario haya corregido el error que haya detectado.


MongoDB no tiene restricciones o disparadores, por lo que la aplicación debe validar los datos.

También puede escribir scripts Javascript que se comprueban una vez al día o más si hay datos no válidos. Puede usar esto para verificar la calidad de la lógica comercial de su aplicación.


Recién comencé a usar MongoDB y PHP juntos, dentro de una aplicación basada en Zend Framework.

He creado 1 objeto para cada colección de MongoDB (por ejemplo, mapas de User.php para la colección de usuarios). Cada objeto sabe a qué colección se asigna y qué campos se requieren. También sabe qué filtros ( Zend_Filter_Input ) y validadores ( Zend_Validate ) se deben aplicar a cada campo. Antes de hacer una inserción de MongoDB () o guardar (), ejecuto $ object-> isValid (), que ejecuta todos los validadores. Si todos pasan isValid () devolverá true y procedo a ejecutar insert () o save (); de lo contrario, mostraré los errores.


A partir de 2.4, MongoDB habilita la validación básica de objetos BSON para mongod y mongorestore cuando escribe en archivos de datos MongoDB. Esto evita que cualquier cliente inserte un BSON no válido o malformado en una base de datos MongoDB. fuente: http://docs.mongodb.org/manual/release-notes/2.4/


A partir de MongoDB 3.2 agregaron validación de documentos ( diapositivas ).

Puede especificar reglas de validación para cada colección, utilizando la opción del validador que utiliza casi todos los operadores de consultas mongo (excepto $geoNear , $near , $nearSphere , $text y $where ).

Para crear una nueva colección con un validador, use:

db.createCollection("your_coll", { validator: { `your validation query` } })

Para agregar un validador a la colección existente, puede agregar el validador:

db.createCollection("your_coll", { validator: { `your validation query` } })

La validación solo funciona en inserción / actualización, por lo que cuando crea un validador en su colección anterior, los datos previos no serán validados (puede escribir validación de nivel de aplicación para datos previos). También puede especificar validationLevel y validationAction para indicar qué sucederá si el documento no pasa la validación.

Si intentas insertar / actualizar el documento con algo que no valide, (y no has especificado ningún valor / acción de validación extraño), entonces obtendrás un error en writeResult (por desgracia, el error no te dice qué falló y obtienes solo validation failed defecto validation failed ):

WriteResult({ "nInserted" : 0, "writeError" : { "code" : 121, "errmsg" : "Document failed validation" } })