¿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?¿Cuál es la mejor manera de validar datos en mongo?
Respuesta
Creo que sería normal que su 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 ni disparadores, por lo que la aplicación debe validar los datos.
También puede escribir scripts de Javascript que se comprueban una vez al día o más si no hay datos válidos. Puede usar esto para verificar la calidad de la lógica comercial de su aplicación.
Acabo de empezar 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, User.php se asigna a 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 se añadió document validation (slides).
Puede especificar reglas de validación para cada colección, usando validator opción de utilizar casi todos los operadores de consulta mongo (excepto $geoNear
, $near
, $nearSphere
, $text
, y $where
).
Para crear una nueva colección con un validador, utilice:
db.createCollection("your_coll", {
validator: { `your validation query` }
})
Para añadir un validador a la colección existente, se puede añadir el validador:
db.createCollection("your_coll", {
validator: { `your validation query` }
})
Validación funciona sólo en insertar/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 intenta insertar/actualizar el documento con algo que falla la validación, (y no ha especificado ningún valor de validación/acción extraño) entonces obtendrá un error en writeResult
(por desgracia, el error no le dice qué falló y se obtiene únicamente por defecto validation failed
):
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
- 1. ¿Cuál es la mejor manera de ejecutar Map/Reduce cosas en Mongo?
- 2. ¿Cuál es la mejor manera de migrar datos en django
- 3. ¿Cuál es la mejor manera de almacenar datos de tendencia?
- 4. ¿Cuál es la mejor manera de usar mongoDB con node.js?
- 5. ¿Cuál es la mejor manera de abrir una conexión de base de datos persistente (mongo) en NodeJS
- 6. ¿La mejor manera de validar la entrada de moneda?
- 7. ¿Cuál es la mejor manera de dibujar en la consola?
- 8. ¿Cuál es la mejor manera de integrar varios sistemas?
- 9. ¿Cuál es la mejor manera de almacenar un valor monetario en la base de datos?
- 10. ¿Cuál es la mejor manera de mostrar HTML en Flex?
- 11. ¿Cuál es la mejor manera de implementar params en JavaScript?
- 12. ¿Cuál es la mejor manera de comparar programas en Windows?
- 13. ¿Cuál es la mejor manera de hacer bucles en JavaScript
- 14. ¿Cuál es la mejor manera de manejar excepciones en Perl?
- 15. ¿Cuál es la mejor manera de escribir comentarios en C?
- 16. Cuál es la mejor manera de paginar resultados en php
- 17. ¿Cuál es la mejor manera de recortar() en javascript
- 18. Cuál es la mejor manera de actualizar entidades en nhibernate
- 19. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
- 20. ¿Cuál es la mejor manera de hacer GUI en Clojure?
- 21. ¿Cuál es la mejor manera de depurar css en ie?
- 22. ¿Cuál es la mejor manera de reemplazar remote.origin.url en Git?
- 23. ¿Cuál es la mejor manera de hacer respaldos automáticos?
- 24. ¿Cuál es la mejor manera de construir una NSCompoundPredicate compleja?
- 25. ¿Cuál es la mejor manera de crear menús dinámicos basados en bases de datos en CakePHP?
- 26. ¿Cuál es la mejor manera de diferir Crystal Reports?
- 27. ¿Cuál es la mejor manera de ampliar la funcionalidad?
- 28. ¿Cuál es la mejor manera de probar un procedimiento almacenado?
- 29. ¿Cuál es la mejor manera de afirmar la igualdad numpy.array?
- 30. ¿Cuál es la mejor manera de analizar una gramática simple?
[Mongo 3.2] (http://stackoverflow.com/a/33602507/1090562) tendrá validación. –