2011-09-21 73 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' });