Как использовать мангуста - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть три поля в моей схеме Мангуста, и я хочу получить только одно, которое будет средним из двух других.

Я пытался использовать Мангуста получить , но я не знаюесли я использую его правильно.

Вот моя схема

const schema = new Schema({
    totalCarrots: {type: Number},
    numberOfRabbits: {type: Number},
    average: {
        type: Number,
        get: function () {
            const average = this.totalCarrots / this.numberOfRabbits;
            if (average) return Math.ceil(average);
            return null;
        }
    }
});

Я ожидал, что среднее вернет вычисленное значение.Как мне это заархивировать?

1 Ответ

1 голос
/ 03 мая 2019

Похоже, вам вообще не нужно get здесь вообще. Поскольку вы просто хотите сгенерировать динамическое значение, вы можете создать свой собственный метод для схемы methods, например:

schema.methods.average = function(){
   const average = this.totalCarrots / this.numberOfRabbits;
   return average ? Math.ceil(average) : null;
}

Теперь вы можете вызывать этот метод для экземпляра вашей схемы:

const doc = new schema({ totalCarrots: 4, numberOfRabbits: 2 })
doc.average() // should return 2

get предназначено для использования в поле, на котором вы на самом деле храните данные, и оно может изменять это поле при каждом обращении к нему. Например, допустим, у нас есть модель Product с полем price. Наши цены хранятся как числа с плавающей точкой, и по какой-либо причине мы хотим округлять значение каждый раз, когда мы его читаем. это было бы хорошим местом для get метода:

const ProductSchema = new Schema({
  price: {
    type: Number,
    get: function(value){
      // value arg is referring to the value of a model instance's price
      return Math.round(value)
    }
  }
})

const Product = mongoose.model('Product', ProductSchema)

const product = new Product({ price: 15.80 })
product.price // will be 16 because we round the stored value in the get method
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...