2013-02-11 9 views
5

Ich habe ein Schema wie folgt aus:Warum kann ich ein eingebettetes Dokument in Mungo nicht validieren? Was ist der richtige Weg?

var testSchema = new Schema({ 
     foo: { type: String, required: true, trim: true }, 
     bar: { 
      fooBar: { type: String }, 
      barFoo: { type: String } 
     } 
}); 

Und ich muss wie diese Werte von bar basierend auf foo Werte, etwas zu validieren:

testSchema.path("bar").validate(function(bar){ 
    if(this.foo === "someValue") 
     //return custom validation logic 1 
    else if(this.foo === "anotherString") 
     //return custom validation logic 2 
    else 
     return false; 
}); 

Aber wenn ich versuche, meine app ich die bekommen strat Folgefehler:

/Users/Renato/github/local/prv/domain/models/testModel.js:34 
testSchema.path("bar").validate(function(bar){ 
        ^
TypeError: Cannot call method 'validate' of undefined 

Was mache ich hier falsch? Was ist der richtige Weg um dieses Objekt zu validieren ??? Ich habe gegoogelt, aber ich konnte nichts finden! Sogar meine Mungo Version ~3.5.5

Antwort

6

Mongoose aktualisiert doesn't appear to consider'bar' ein path selbst, sondern nur ein prefix für 2 getrennte Wege zu sein - 'bar.fooBar' und 'bar.barFoo':

testSchema.path("bar.fooBar").validate(function(fooBar){ 
    if(this.foo === "someValue") 
     //return custom validation logic 1 
    else 
     return false; 
}); 

testSchema.path("bar.barFoo").validate(function(barFoo){ 
    if(this.foo === "anotherString") 
     //return custom validation logic 2 
    else 
     return false; 
}); 

Sie auch schema.pre() finden kann nützlich sein um das Modell kollektiv zu validieren (ein anderes Beispiel kann in der Sub Docs Dokumentation gefunden werden):

testSchema.pre('save', function (next) { 
    if(this.foo === "someValue") 
     return next(new Error('Invalid 1')); 
    else if(this.foo === "anotherString") 
     return next(new Error('Invalid 2')); 
    else 
     next(); 
}); 
+0

Ja, großartig, das hat es geschafft! Vielen Dank! – renatoargh

+1

Ich habe das gleiche Problem mit dem Erstellen und Aktualisieren, wenn ich 'testModel.create ({foo: {foobar: 'foo'}})' es funktioniert nicht, jede Umgehungslösung? @ Jonathan-Lonowski – kilianc

Verwandte Themen