1

Я пытаюсь написать схему, которая принимает параметры, необходимые для действия. Я хочу добавить поле «activityParameters», которое будет специфичным для конкретного случая в зависимости от типа activityType. Предположим, что если activityType является электронной почтой, тогда параметры активностиParameters должны хранить такие данные, как: String, from: String, subject: String, body: String ', и если действие является «export», тогда оно должно хранить такие параметры, как «path: String». Различные виды деятельности будут иметь разные параметры. Пожалуйста, помогите мне, как это сделать.Добавление поля в схему с использованием mongoose в узле js

var activity_type = { 
    values: 'email export'.split(' '), 
    message: 'validation failed for path `{PATH}` with value `{VALUE}`' 
}; 
var activitySchema = new Schema({ 
    activityName: String, 
    activityDescription: String, 
    executionTime: {type: Date , default: null}, 
    activityStartTime: {type: Date , default: null}, 
    activityCompletionTime: {type: Date , default: null}, 
    activityType: {type:String, enum: activity_type}, 
    //activityParameters: , 
    appName : String, 
    activityRetryCount: {type:Number,default:0}, 
    createdOn: {type:Date , default:Date.now}, 
    deletedOn: {type: Date , default: null}, 
    updatedOn: {type: Date , default: null} 

});

ответ

0

На самом деле нет хорошего ответа для этого с помощью мангуста и сохранения строго типизированной схемы.

Вы можете указать все поля для каждого типа в схеме, а затем использовать их в зависимости от типа (экспорт vs сообщения).

var activitySchema = new Schema({ 
    ... 
    activityParameters: { 
     to:String, 
     from:String, 
     path:String 
}}); 

Вы могли бы рассмотреть наличие ключа каждого подтипа быть улучшение:

var activitySchema = new Schema({ 
    ... 
    emailActivityParameters:{ 
     to:String, 
     from:String, 
    }, 

    exportActivityParameters:{ 
     path:String, 
    } 
}); 

Было бы довольно легко получить доступ к каждому «поддокумент» в зависимости от вида деятельности.

Наконец, вы можете иметь ключ называется activityParameters и есть, что быть произвольной формы: JSON

var activitySchema = new Schema({ 
    ... 
    activityParameters: {} 
}); 

В этом случае вы можете сохранить свою целостность схемы с использованием пользовательских валидаторы.

Если эти подходы не привлекают, тогда, может быть, мангуста - это не тот инструмент, который вам нужен. Вы можете использовать драйвер mongo более низкого уровня, а затем что-то вроде TypScript или json schema, чтобы проверить свои модели, прежде чем сохранять их в mongoose. Проверьте это, например: https://github.com/litixsoft/lx-valid.