ТЛ: др;- Я хочу извлечь результат усредненной функции агрегирования, который включается в каждую запись, в отдельное значение в моем наборе результатов в Sequelize.
У меня есть таблица reviews
, и я хочу получитьсовокупное среднее всех отзывов.Я хочу включить это как столбец в дополнение к массиву возвращаемых строк.
Необработанный запрос postgres:
SELECT avg(rating) as average_rating
FROM reviews
GROUP BY rating;
В ORM мой запрос выглядит следующим образом:
const reviews = await Review.findAll({
where: {
id: req.params.id,
status: STATUS_TYPE_ACTIVE
},
attributes: [
'id',
'rating',
'body',
'created_at',
'updated_at',
[
sequelize.fn('AVG', sequelize.col('review.rating')),
'average_rating'
]
],
include: [
{
model: User,
attributes: ['id', 'photo', 'username']
}
],
group: ['review.id', 'user.id']
});
, который возвращает такие значения, как:
review {
dataValues:
{ id: 2,
rating: 5,
body: 'testing',
created_at: 2018-05-22T18:41:46.385Z,
updated_at: 2018-05-22T18:41:46.385Z,
average_rating: '5.0000000000000000', <--- here we are
user: [user] },
Как видите, average_rating
там и выглядит хорошо.Но я не хочу, чтобы это включалось для КАЖДОЙ записи обзора, которую я получаю - только один раз.
Я могу легко преобразовать возвращаемый массив (и вырвать average_rating
), но я бы не хотел изменятьпредметы после того, как они возвращаются из ОРМ.Как я могу это сделать?