2010-02-13 141 views

Respuesta

1

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.

6

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.

0

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.

1

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/

7

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" 
    } 
}) 
Cuestiones relacionadas