Для аргументации возьмем эту схему:

const ImaginarySchema = new Schema ({
    Name: String,
    Age: Number,
    Weight: Number, 
    Value: Number, 
    });

В этой схеме способ вычисления значения представлен следующей функцией:

function calculateValue(age, weight) {
    value = Age*Weight; 
};

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

Как лучше всего это реализовать и где это нужно разместить в приложении?


Мои попытки:


Во-первых, я хотел попробовать следующий синтаксис, но согласно mongoDB docs не рекомендуется хранить логику приложения на сервере, поэтому сохранение этой функции в server.js не кажется лучшей идеей, и это предполагает, что такой синтаксис вообще возможен.

const ImaginarySchema = new Schema ({
    Name: String,
    AgeinDays: Number,
    Weight: Number, 
    Value: calculateValue(), 
    });

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

.pre('save'), function(next){
function calculateValue(age, weight) {
   value = Age*Weight; 
 next(); 
 };

Заранее благодарю за любую помощь.

1
jmfbot 24 Сен 2018 в 15:08

2 ответа

Лучший ответ

Возможно, вы ищете неуловимую статику Мангуста:

https://mongoosejs.com/docs/guide.html#statics

Статика создает искусственный метод, который разрешает то, что вы хотите.

Если это не то, что вы ищете, посмотрите ниже, есть помощники по запросам, которые могут удовлетворить ваши потребности.

Если это все еще не то, что вы ищете, посмотрите ниже, есть виртуальные объекты, которые, я думаю, наиболее точно соответствуют вашему описанию.


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

1
Drop Bear Dan 24 Сен 2018 в 12:48

Согласно mongoose SchemaTypes, документ не может быть функцией. Допустимые типы включают:

  • строка
  • Число
  • Свидание
  • буфер
  • логический
  • смешанный
  • ObjectId
  • массив
  • Decimal128
  • карта
0
ancasen 24 Сен 2018 в 12:56