Javascript 设置基于同一模型中另一个枚举数组的枚举数组-Mongoose

Javascript 设置基于同一模型中另一个枚举数组的枚举数组-Mongoose,javascript,mongoose,mongoose-schema,Javascript,Mongoose,Mongoose Schema,我试图以这样一种方式构建我的列表模型:如果父数组列表中存在子类别,则它限制用户仅选择子类别。我可以在构建API端点时很好地做到这一点,但我想看看是否有可能在模型本身中做到这一点 以下是一个例子: If(用户从父枚举类别数组中选择父类别住户) .then(根据父类别设置枚举数组) 代码参考: 型号: var categories = require(settings.PROJECT_DIR + 'controllers/data/categories'); var ListingSchema

我试图以这样一种方式构建我的列表模型:如果父数组列表中存在子类别,则它限制用户仅选择子类别。我可以在构建API端点时很好地做到这一点,但我想看看是否有可能在模型本身中做到这一点

以下是一个例子:

If(用户从父枚举类别数组中选择父类别住户) .then(根据父类别设置枚举数组)

代码参考:

型号:

var categories  = require(settings.PROJECT_DIR + 'controllers/data/categories');

var ListingSchema = mongoose.Schema({
    data: {
        category: {
            parent: {
                type: String,
                enum: categories.parent(),
                required: true
            },
            sub: {
                type: String,
                enum: categories.sub("household"), // should be this.data.category.parent instead of hard coded value
                required: true
            }
        },
    }
}
类别数组:

module.exports.categories = [
    { "household"  : ["repair", "carpentry", "housecleaning", "electrical", "handymen", "movers", "plumbing", "gardening/pool"] },
    { "automotive" : ["autobody", "mechanics", "towing"] },
    { "creative"   : ["art", "cooking", "film", "graphic_design", "marketing", "music", "writing"] },
    { "tech"       : ["tech", "repair", "web_design", "web_development"] },
    { "events"     : ["artist", "florist", "musician", "photography", "planning", "venue"] },
    { "legal"      : ["accounting", "advising", "investments", "consulting", "real_estate"] },
    { "health"     : ["beauty", "fitness", "nutrition", "therapeutic"] },
    { "pets"       : ["grooming", "sitter", "trainer", "walker"] }
];

// @returns parent categories
module.exports.parent = function() {
    var self = this;
    var parentCategories = [];

    for(var i in self.categories) {
        parentCategories.push( Object.keys(self.categories[i])[0] );
    }

    return parentCategories;
}

// @returns sub categories based of parent input
module.exports.sub = function(parent) {
    var self = this;
    var subCategories = [];

    for(var i in self.categories) {
        if(self.categories[i][parent]) {
            return self.categories[i][parent];
        } 
    }
}

这在模型中是不可能的

mongoose.Schema()。创建的对象存储在ListingSchema中。由于对象是在第一次执行
mongoose.Schema()
方法时创建的,因此在此之后不能动态修改值。这意味着一旦设置了enum接受的值,就不能对其进行更改


最好的方法是在单个数组中添加所有值,然后将其设置为enum的值,并在其他地方执行子类别限制。

我明白了。是的,我是通过express中的中间件进行限制的。还有什么需要知道的吗?