动态定义一个Mongoose Schema

时间:2011-09-21 12:42:13

标签: mongodb node.js mongoose

我有一个模型文件,汇集了我所有的Mongoose模型。我想用可变数量的字段初始化的模型之一。目前我正在定义比我想要的更多的字段:

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

显然这并不理想。我看到Mongoose会让你指定Schema定义之外的选项,但是看不到如何添加新字段(或者我想,在Mongoose中添加路径)。

4 个答案:

答案 0 :(得分:6)

基于mongoose plugin documentation看起来你可以这么做:

schema.add({ field: Number })

答案 1 :(得分:3)

这需要进行验证,但应该可以查看来源:

在Schema构造函数中,它只是将定义对象传递给this.add()source)。

然后在Schema.prototype.addsource)内创建实际路径。

所以,你似乎需要做的就是:

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

答案 2 :(得分:1)

我在Mongoose documentation page

中找到了这个
var ToySchema = new Schema;
ToySchema.add({ name: 'string', color: 'string', price: 'number' });

答案 3 :(得分:0)

您可以使用'mixed'类型来封装您的值。虽然它不可能让它们处于顶层但是它的效果很好。

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

这是mapreduce架构的摘录。我使用混合类型存储某人给出一定评级的次数,所以我们可以说“10个1星评级,45个4星评级”等等。

混合型非常适合。