2010-02-13 15 views
9

Wie können Daten, die in MongoDB eingefügt oder aktualisiert werden, am besten validiert werden? Ist es eine Art von Server geschrieben Code ausgeführt, der die Validierung durchführt?Was ist der beste Weg, Daten in Mongo zu validieren?

+2

[Mongo 3.2] (http://stackoverflow.com/a/33602507/1090562) wird die Validierung haben. –

Antwort

1

Ich denke, es wäre normal, dass Ihre App mit so etwas fertig wird. Wenn die Daten in irgendeiner Weise ungültig sind, lassen Sie sie nicht zum Datenspeicher hinzugefügt werden, bis der Benutzer den von Ihnen gefundenen Fehler korrigiert hat.

6

MongoDB hat keine Einschränkungen oder Trigger, daher muss die Anwendung die Daten validieren.

Sie können auch Javascript-Skripte schreiben, die einmal pro Tag oder mehr überprüfen, wenn ungültige Daten vorhanden sind. Sie können damit die Qualität der Geschäftslogik Ihrer Anwendung überprüfen.

0

Ich habe gerade angefangen, MongoDB und PHP zusammen in einer Zend Framework basierten Anwendung zu verwenden.

Ich habe 1 Objekt für jede MongoDB Sammlung erstellt (z. B. User.php entspricht der Benutzersammlung). Jedes Objekt weiß, welcher Sammlung es zugeordnet ist und welche Felder benötigt werden. Es weiß auch, welche Filter (Zend_Filter_Input) und Validatoren (Zend_Validate) auf jedes Feld angewendet werden sollten. Bevor Sie MongoDB insert() oder save() ausführen, führe ich $ object-> isValid() aus, wodurch alle Validatoren ausgeführt werden. Wenn sie alle bestehen, wird isValid() true zurückgeben, und ich fahre fort, um die insert() oder save() auszuführen, sonst zeige ich die Fehler an.

1

Ab Version 2.4 ermöglicht MongoDB die grundlegende BSON-Objektvalidierung für mongod und mongorestore beim Schreiben in MongoDB-Datendateien. Dies verhindert, dass ein Client ungültige oder fehlerhafte BSON in eine MongoDB-Datenbank einfügt. Quelle: http://docs.mongodb.org/manual/release-notes/2.4/

7

von Ab MongoDB 3.2 sie hinzugefügt document validation (slides).

Sie können Validierungsregeln für jede Sammlung angeben, mit validator Option fast alles Mongo Abfrage Operatoren (außer $geoNear, $near, $nearSphere, $text und $where).

Um eine neue Kollektion mit einem Prüfer zu erstellen, verwenden Sie:

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

Um einen Validator zur bestehenden Sammlung hinzufügen, können Sie den Validator hinzufügen:

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

Validierung nur auf dem Einsatz arbeiten/Wenn Sie einen Validator für Ihre alte Sammlung erstellen, werden die vorherigen Daten nicht validiert (Sie können eine Validierung auf Anwendungsebene für vorherige Daten schreiben). Sie können auch validationLevel und validationAction angeben, um festzustellen, was passiert, wenn das Dokument die Validierung nicht besteht.

Wenn Sie versuchen, das Dokument mit etwas einzufügen/zu aktualisieren, das die Validierung nicht besteht (und keine merkwürdige validationLevel/action angegeben haben), erhalten Sie einen Fehler unter writeResult (leider sagt der Fehler nicht, was fehlgeschlagen ist und Sie nur die Standard validation failed erhalten):

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