Я пытаюсь создать мою модель листинга таким образом, чтобы она ограничивала пользователей только выбором подкатегории, если она существует в списке родительских массивов. Я могу сделать это, когда я создаю конечную точку 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.Schema()
создает объект Schema на основе предоставленного ему параметра. И созданный объект хранится в ListSchema. Поскольку объект создан, первый раз выполняется mongoose.Schema()
, вы не можете изменять значения динамически после этого. Это означает, что значение, принятое перечислением, не может быть изменено после его установки.
Лучший подход заключается в том, чтобы добавить все значения в один массив, а затем установить его как значение перечисления и сделать ограничение подкатегории где-то еще.