2016-07-15 3 views
1

ich das Schema wie folgt eingerichtet haben.Mungo, wie Art und Wert zu validieren, wenn Aktualisierung/findOneAndUpdate

Es arbeitet an der Schaffung gut. Wenn der erforderliche oder falsche Typ fehlt, wird ein Validierungsfehler ausgelöst. So wird es für beide Typ und Wert prüfen (wenn ich zusätzliche Validierungsfunktion hinzufügen, um die Werte auf jedem Feld zu validieren)

Allerdings, wenn ich versuche zu aktualisieren oder findOneAndUpdate. Ich habe die runValidators als wahr gesetzt. Es funktioniert irgendwie, aber es prüft nur, ob irgendwelche erforderlichen fehlen. Aber es hat den Typ nicht validiert und kann meinen Typ automatisch in das Format konvertieren.

beispiels wenn i isAction gesetzt (erwarten Boolean zu sein) integer zu sein, wird es automatisch in boolean false konvertieren. Es ist also eine Art der Typprüfung. Und dann wird es die Validator-Funktion eingeben, die bereits boolesch ist, aber ich erwarte, dass es einen Validierungsfehler auf den Typ vor dem Eingeben der Validierungsfunktion geben sollte

Ein weiteres Problem betrifft das Array und das Objekt. Der Typ der Tiefeneigenschaft im Objekt wurde nicht validiert und direkt in die Validierungsfunktion übernommen.

Also ich würde gerne sehen, wenn es eine bessere Art und Weise ist es, sowohl Art und Wert richtig, wenn Aktualisierung/findOneAndUpdate zu validieren.

Ich habe einige Mungo Validator Module gesucht, aber die meisten von ihnen sind Helfer auf dem Prüf-Funktion auf jedem Feld. Diese Daten werden also bereits von Integer in Boolean konvertiert und können den Typ zu diesem Zeitpunkt nicht überprüfen.

In diesem Moment kann ich glaube, nur die Art und Wert vor insert/update in Mungo von Validate.

const schema = new mongoose.Schema({{ 
 
    id: { 
 
     type: String, 
 
     unique: true, 
 
     required: true, 
 
    }, 
 
    address: { 
 
     formatted: String, 
 
     streetAddress: String, 
 
     locality: String, 
 
     region: String, 
 
     postalCode: String, 
 
     country: String, 
 
    }, 
 
    isActive: Boolean, 
 
    }); 
 

 
const user = mongoose.model('User', schema); 
 

 
// this one work with the validation on the type 
 
User.create({ id : 'userA' }, (err) => { 
 
    console.log(err); 
 
}); 
 

 
// fail to validate the type on both findOneAndUpdate 
 
User.update({ id:'userA'},{ $set: { address:12313 }}, { runValidators: true}, (err) => { 
 
    console.log(err); 
 
});

Antwort

0

Dieser Artikel https://www.mongodb.com/blog/post/introducing-version-40-mongoose-nodejs-odm im Detail über die Mungo Validatoren diskutieren.

Bitte schauen Sie auf dem Abschnitt Pre- und Post-Hooks für Abfragen, die die Mongoose 4 Feature vor und nach dem Haken für count() auflistet, finden(), FindOne(), findOneAndUpdate() und update() .

Hoffe es hilft !!

+0

Aber der Kontext für Pre, Post Hooks sind Modell selbst. Obwohl wir die Abfrage erhalten können, muss ich manuell den Datentyp überprüfen und validieren, von dem ich erwarte, dass der Mungo automatisch gemäß dem Schema-definierten Datentyp arbeitet und sich genauso verhält wie ein neuer. Wenn ja, warum nicht die Validierung selbst durchführen, bevor Sie die Daten manuell aktualisieren. BTW, danke für Ihre Hilfe. –