动态定义Mongoose模式

4

我有一个模型文件,汇集了所有的Mongoose模型。其中一个模型需要用可变数量的字段进行初始化。目前,我定义的字段比我实际需要的更多:

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

显然这不是理想的情况。我看到Mongoose允许您在Schema定义之外指定选项,但不知道如何添加新字段(或路径,在Mongoose中)。

4个回答

6
根据mongoose插件文档,看起来你只需要执行以下操作即可:

mongoose插件文档

schema.add({ field: Number })

3
这需要验证,但从源代码看应该是可行的:
在Schema构造函数中,它只是将定义对象传递给this.add()源代码)。
实际路径是在Schema.prototype.add内创建的(源代码)。
因此,似乎你只需要像这样做:
// not sure what this looks like in CoffeeScript
TallySchema.add({ /* new property definition here */ });

你好!有没有更少“hacky”的方法来完成这个?我的意思是,Mongoose没有特殊的数据类型或类似的东西可以用来声明条件子模式吗?提前致谢。 - Diosney

1

我在Mongoose文档页面中找到了这个:

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

0

您可以使用“mixed”类型来封装您的值。但是,它们不能在顶层,否则无法正常工作。

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

这是一个来自MapReduce模式的选段。我使用混合类型来存储某人给定评级的次数,这样我们就可以说类似于“10个1星评级,45个4星评级”之类的话。
混合类型在这方面非常好用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接