Sequelize - 将聚合函数值放在每个结果之外

时间:2018-05-22 22:30:02

标签: postgresql sequelize.js

TL:博士; - 我想在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),但我不想在它们从ORM返回后改变项目。我怎么能这样做?

0 个答案:

没有答案