使用Mongoose模式,是否可以定义未知的对象属性/键的类型?

时间:2016-10-10 10:13:20

标签: mongoose

例如,我有一个如下对象:

{{1}}

我不知道对象属性(foo,bar,baz)的名称,但我希望每个属性只能是String类型,因此" baz"将被拒绝/抛出错误。

这些数据的模型架构会是什么样子?我可以看到这样做的唯一方法是使用类似于整个对象/模型的混合类型的自定义类型。

1 个答案:

答案 0 :(得分:0)

"外卡"没有选项。据我所知,架构路径验证。 您可以做的是定义strict: false架构并定义pre save and update函数。

架构如下所示:

var TestSchema  = new mongoose.Schema(
    {

    },
    {
        strict: false
    }
);

这意味着没有已定义的字段,您可以输入所需的任何字段。现在,您希望在使用pre save函数保存之前验证文档:

TestSchema.pre('save', function (next) {
    var doc = this.toObject();
    for (var prop in doc) {
        if ('string' !== typeof doc[prop]) {
            next(new Error('validation error'));
        }
    }

    next();
});

您希望在pre update函数上执行相同的操作。您可以在此处详细了解mongoose Middleware

http://mongoosejs.com/docs/middleware.html