Может ли значение документа mongoose быть функцией? - PullRequest
0 голосов
/ 24 сентября 2018

В качестве аргумента давайте возьмем следующую схему:

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

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

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

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

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


Мои попытки:


Во-первых, я хотел попробовать следующий синтаксис, но в соответствии с документами mongoDB не рекомендуется хранить приложениелогика на сервере, поэтому сохранение этой функции в 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(); 
 };

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

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

В соответствии с mongoose SchemaTypes документ не может быть функцией.Допустимые типы:

  • String
  • Число
  • Дата
  • Буфер
  • Логический
  • Смешанный
  • ObjectId
  • Массив
  • Десятичный128
  • Карта
0 голосов
/ 24 сентября 2018

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

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

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

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

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...