Как получить значение из поля и используя его рассчитать новое значение в MongoDB

В базе данных хранится оффер. У оффера есть поле rating. Нужно сделать автоматический расчёт рейтинга всякий раз когда какой-то пользователь добавляет свою оценку.

Хочу сделать что-то типа такого:

public async calcRating(offerId: string, rating: number): Promise<DocumentType<OfferEntity> | null> {
  return this.offerModel
    .findByIdAndUpdate(offerId, {'$set': {
      rating: ((this.offerModel.rating + rating)/2).toFixed(1),
    }}).exec();
}

Т.е. нужно найти оффер, взять из его поля rating хранящееся там значение, прибавить к нему полученное от пользователя значение и пересчитать рейтинг заново.


Ответы (1 шт):

Автор решения: Влад Лесной

Сделайте два вызова базы. Это не настолько страшно как вам кажется

public async calcRating(offerId: string, rating: number): Promise<DocumentType<OfferEntity> | null> 
{
      const offer = await this.offerModel.findById(offerId).lean() // вернет объект с данными без методов модели
      return this.offerModel.findByIdAndUpdate(offerId, {'$set': {
          rating: ((offer.rating + rating)/2).toFixed(1),
        }}).exec();
}

→ Ссылка