2011-09-21 83 views
4

我有一個模型文件,它將所有我的貓貓模型聚集在一起。我想用不定數量的字段初始化一個模型。目前我正在定義比我想要的更多的字段:實時定義貓鼬模式

TallySchema = new mongoose.Schema 
    0: Number 
    1: Number 
    ... 
    20: Number 

顯然這並不理想。我看到Mongoose會讓你在Schema定義之外指定選項,但看不到如何添加新的字段(或者我猜,在Mongoose中)。

回答

3

這將需要進行驗證,但查看源應該是可能的:

在模式構造,它只是將定義對象傳遞給this.add()source)。

然後在Schema.prototype.addsource)內創建實際路徑。

所以,好像所有你需要做的是一樣的東西:

// not sure what this looks like in CoffeeScript 
TallySchema.add({ /* new property definition here */ }); 
+0

嗨!有一個「黑客」方式來實現這一點?我的意思是,Mongoose沒有特殊的日期類型或類似的東西可以用來聲明條件子模式?提前致謝。 – diosney

0

您可以使用「混合」型封裝你的價值觀。儘管如此,它們不可能處於頂級水平,但在其他方面效果很好。

new mongoose.Schema({ 
    average: Number, 
    countPerRating: mongoose.Schema.Types.Mixed, 
}); 

這是mapreduce模式的摘錄。我使用混合類型來存儲某人給出某個評分的次數,所以我們可以說諸如「10 1星評級,45 4星評級」等的內容。

混合類型對此很有幫助。

1

我發現這個在Mongoose documentation page

var ToySchema = new Schema; 
ToySchema.add({ name: 'string', color: 'string', price: 'number' });