Привет, у меня есть коллекция таких документов:
{
title: "Video name 1",
avgRating: 0,
reviews: [
{ author: "username", rating: 5}
]
}
И у меня возникает три вопроса:
1. Как правильнее обновлять среднюю оценку? Сейчас у меня добавляется новый ревью через findOneAndUpdate и $push, и я не понимаю как там получить предыдущую оценку, чтобы обсчитать новую на основе той которая пришла от пользователя
2. Как разрешить добавление только одного ревью одному пользователю под одно видео?
3. В связи с предыдущим вопросом, может стоит хранить через $ref? Коллекция юзеров (тобишь авторов ревью) включает в себя этот самый уникальный username и тогда проблема сама как-то решится?
Пока самое простое решение, которое я вижу это:
1. Получить документ видео
2. Посмотреть есть ли там ревью от пользователя уже
3. Если нет, то взять все оценки всех ревью, плюс оценка этого автора и поделить на общее количество
4. Присвоить avgRating
5. Пушнуть ревью человека в массив ревью
Но это выглядит как алгоритмическая работа, уверен что это можно впихнуть в запрос и по идее это должно работать быстрее + атомарно