Я пытаюсь создать динамическую схему мангуста.Родительская схема - это «интерфейс».Это имеет два поля: «тип» и «настройки».
На основе поданного «типа» мне нужно создать / назначить / проверить поле «настройки».
const ENUM_SETTINGS = {
"RS232": new mongoose.Schema({
baudRate: {
type: Number,
required: true
},
dataBits: {
type: Number,
default: 8
},
stopBits: {
type: Number,
default: 1
},
parity: {
type: String,
enum: ['none', 'even', 'mark', 'odd', 'space'],
default: "none"
},
rtscts: {
type: Boolean,
default: false
},
xon: {
type: Boolean,
default: false
},
xoff: {
type: Boolean,
default: false
},
xany: {
type: Boolean,
default: false
}
}),
"ETHERNET": new mongoose.Schema({
host: {
type: String,
required: true
},
port: {
type: Number,
required: true
},
path: {
type: String,
default: "/"
},
protocol: {
type: String,
required: true,
enum: ["ws", "http", "tcp", "udp"]
}
})
};
const interfaceSchema = new mongoose.Schema({
type: {
type: String,
required: true,
enum: Object.keys(ENUM_SETTINGS)
},
description: {
type: String
},
adapter: {
type: ObjectId,
ref: "Adapters",
//required: true
},
settings: {
type: mongoose.Schema.Types.Mixed,
required: true,
// ... ENUM_SETTINGS based on type value
}
}, {
strict: false
});
Если «тип», введенный в «interfaceSchema», равен «ETHERNET», то ENUM_SETTINGS["ETHERNET"]
следует использовать в качестве поля «настройки».
То же самое относится и к «RS232», тогда следует использовать ENUM_SETTINGS["RS232"]
Причина, по которой я хочу использовать схему, заключается в том, что она имеет встроенные валидаторы, и мне не нужно проверять ее в пользовательских валидаторах или моемБизнес-логика.
Что я читаю в документации mongoose, когда создается моя схема, уже слишком поздно делать что-то подобное ...
Есть ли обходной путь или элегантный способ проверки моегоENUM_SETTINGS[<type>]
схема с данными в «interface.settings?»