2010-02-13 11 views

risposta

1

Penso che sarebbe normale che la tua app gestisca questo genere di cose. Se i dati non sono validi in qualche modo, non lasciare che vengano aggiunti all'archivio dati finché l'utente non ha corretto qualsiasi errore rilevato.

6

MongoDB non ha vincoli o trigger, quindi l'applicazione deve convalidare i dati.

È anche possibile scrivere script Javascript che controllano una volta al giorno o più se ci sono dati non validi. È possibile utilizzarlo per verificare la qualità della business logic della propria applicazione.

0

Ho appena iniziato a utilizzare MongoDB e PHP insieme, all'interno di un'applicazione basata su Zend Framework.

Ho creato 1 oggetto per ogni raccolta MongoDB (ad esempio, User.php esegue il mapping alla raccolta utenti). Ogni oggetto sa a quale raccolta è mappata e quali campi sono richiesti. Sa anche quali filtri (Zend_Filter_Input) e validatori (Zend_Validate) devono essere applicati a ciascun campo. Prima di eseguire un inserimento MongoDB() o save(), eseguo $ object-> isValid(), che esegue tutti i validatori. Se passano tutti isValid() restituirà true, e procedo per eseguire l'insert() o save(), altrimenti visualizzerò gli errori.

1

A partire da 2.4, MongoDB abilita la convalida dell'oggetto BSON di base per mongod e mongorestore durante la scrittura in file di dati MongoDB. Ciò impedisce a qualsiasi client di inserire BSON non valido o non valido in un database MongoDB. fonte: http://docs.mongodb.org/manual/release-notes/2.4/

7

A partire da MongoDB 3.2 hanno aggiunto document validation (slides).

È possibile specificare le regole di validazione per ogni collezione, utilizzando validator opzione utilizzando quasi tutti gli operatori di query Mongo (tranne $geoNear, $near, $nearSphere, $text, e $where).

Per creare una nuova collezione con un validatore, utilizzare:

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

Per aggiungere un validatore alla collezione esistente, è possibile aggiungere il validatore:

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

convalida funzionano solo su inserimento/aggiornamento, quindi quando crei un validatore sulla tua vecchia raccolta, i dati precedenti non verranno convalidati (puoi scrivere la convalida a livello di applicazione per un dato precedente). È inoltre possibile specificare validationLevel e validationAction per indicare cosa accadrà se il documento non supera la convalida.

Se si tenta di inserire/aggiornare il documento con qualcosa che non riesce la convalida, (e non hanno specificato alcun strano validationLevel/azione) allora si verificherà un errore su writeResult (purtroppo l'errore non ti dice cosa non è riuscito e si ottiene solo di default validation failed):

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