Установить Enum Array на основе другого массива Enum в той же модели - Mongoose

1

Я пытаюсь создать мою модель листинга таким образом, чтобы она ограничивала пользователей только выбором подкатегории, если она существует в списке родительских массивов. Я могу сделать это, когда я создаю конечную точку API отлично, но я хотел посмотреть, возможно ли это сделать в самой модели.

вот пример:

Если (пользователь выбирает семейство родительской категории из массива категорий родительского перечисления). Then (установите массив ENUM на основе родительской категории)

Код ссылки:

Модель:

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
mongoose-schema

1 ответ

1
Лучший ответ

Это невозможно в модели.

mongoose.Schema() создает объект Schema на основе предоставленного ему параметра. И созданный объект хранится в ListSchema. Поскольку объект создан, первый раз выполняется mongoose.Schema(), вы не можете изменять значения динамически после этого. Это означает, что значение, принятое перечислением, не может быть изменено после его установки.

Лучший подход заключается в том, чтобы добавить все значения в один массив, а затем установить его как значение перечисления и сделать ограничение подкатегории где-то еще.

  • 0
    Понимаю. Да, я сделал ограничение через промежуточное ПО в экспрессе вместо этого.
  • 0
    Что-нибудь еще, что вам нужно знать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню