2013-02-11 11 views
5

मैं इस तरह एक स्कीमा है:मैं mongoose में एक एम्बेडेड दस्तावेज़ को मान्य क्यों नहीं कर सकता? ऐसा करने का सही तरीका क्या है?

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

और मैं foo मूल्यों, कुछ इस तरह के आधार पर bar के मूल्यों को मान्य करना होगा:

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; 
}); 

लेकिन मैं मिलता है जब मैं अपने अनुप्रयोग शुरू करते करने की कोशिश निम्नलिखित त्रुटि:

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

मैं यहां क्या गलत कर रहा हूं? इस ऑब्जेक्ट को सत्यापित करने का सही तरीका क्या है ??? मैं इसके लिए googled लेकिन मुझे कुछ भी नहीं लग रहा था! यहां तक ​​कि ~3.5.5

उत्तर

6

करने के लिए अपने नेवला संस्करण अद्यतन नेवला doesn't appear to consider'bar' एक path ही हो सकता है, बल्कि सिर्फ 2 अलग रास्तों के लिए एक prefix - 'bar.fooBar' और '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; 
}); 

तुम भी schema.pre() मिल सकता है उपयोगी होने के लिए मॉडल को सामूहिक रूप से मान्य करने के लिए (एक और उदाहरण Sub Docs दस्तावेज में पाया जा सकता है):

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

हाँ, बढ़िया, उसने चाल की है! धन्यवाद! – renatoargh

+1

मुझे बनाने और अपडेट करने के साथ एक ही समस्या है, अगर मैं 'testModel.create ({foo: {foobar: 'foo'}} करता हूं) 'यह काम नहीं करता है, कोई कामकाज? @ जोनाथन-lonowski – kilianc

संबंधित मुद्दे