2012-07-14 81 views
2

我是一個新手貓鼬和官方文檔中我沒有發現任何與我需要的東西有關。在貓鼬如何聲明動態模式

我該如何聲明一個動態的子模式?

例如:

var A = new Schema({ 
    name  : String, 
    subtype  : String, 
    description : String 
}); 

var B = new Schema({ 
    name  : String, 
    description : String 
}); 

var C = new Schema({ 
    name  : String, 
    type  : [if(type.value == 'A') then uses Schema-A; 
        if(type.value == 'B') then uses Schema-B; 
        ] 
}); 

希望這是有道理的。

在此先感謝。

回答

0

爲什麼你需要這個?

在Javascript中,您不需要考慮對象的類。

你只需要知道類型,當你想要初始化它,當你想在MongoDB中搜索。

+0

嗨!感謝您的回覆:D。我需要的是在一個貓鼬Subschema中容納變量字段,如果你知道一個方法來做這件事你能發表一個例子嗎?不管是在Schema定義階段還是在初始化階段,但如果解決方案沒有失去使用貓鼬(驗證等)的好處,這可能會很好。 – diosney 2012-07-15 14:16:16

+1

將模式定義爲所有可能字段的超集,然後使用驗證中間件來確保填充的字段集合有效。 – JohnnyHK 2012-07-15 18:43:06

+0

經過深入挖掘,我意識到我真的不需要我的應用程序;)謝謝。 – diosney 2012-08-01 23:32:25

1

您可以將模式的自定義部分的類型設置爲{},然後驗證流入的不同結構。請參閱this gist。它不像爲不同的架構設置不同的架構,但它應該達到目的。從本質上講,通過這種方式設置,你基本上是說文檔的這部分沒有Schema。將架構看作確定文件的部分,此處唯一確定的部分是動態部分的佔位符。

我認爲,您也可以將每個不同的結構創建爲不同的模式,但存儲在同一個集合中,選擇合適的模式。我從來沒有嘗試過,但它應該被允許,因爲基礎MongoDB的無模式性質。