Как получить значение из поля и используя его рассчитать новое значение в 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();
}