SEQUELIZE - 按关联模型的平均值排序

时间:2021-03-23 14:32:07

标签: mysql express sequelize.js

我有一个查询,它使用“include”将 2 个表连接到 sequelize。 我通过使用“属性:false”来使用左连接。

一切都按预期进行,但我想按平均值或“评级”列对获取的结果进行降序排序,因此我获得了每个事件的最佳评级。 >

这里的关联:

events.hasMany(users_events_liked, {
  as: "liked_events",
  foreignKey: "id_events",
});
events.hasMany(event_ratings, { foreignKey: "id_event" });
event_ratings.belongsTo(events, { foreignKey: "id_event" });
users_events_liked.belongsTo(events, { foreignKey: "id_events" });

这里是查询:

module.exports = (app) => {
  app.get("/api/getAllCurrentEvents", auth, async (req, res) => {
    try {
      let results = await events.findAll({
        group: "id",
        where: {
          start_time: { [Op.gte]: moment().toDate() },
        },
        include: [
          {
            model: event_ratings,
            required: false,
            attributes: [
              [Sequelize.fn("avg", Sequelize.col("rating")), "ratings"],
            ],
          },
          {
            model: users_events_liked,
            required: false,
            attributes: [
              [
                Sequelize.fn("COUNT", Sequelize.col("id_events")),
                "number_of_participants",
              ],
            ],
          },
        ],
           ** HERE I WANT TO ORDER BY AVERAGE on rating.
            order : [[]]
           **
             
      });
      res.json(results);
    } catch (err) {
      res.status(500).json(err);
      console.log(err);
    }
  });

我尝试了什么:

  order: [
          [event_ratings, Sequelize.fn("AVG", Sequelize.col("rating")), "DESC"],
        ],

mysql 出现以下错误:

GROUP BY `id` ORDER BY `event_ratings`.AVG(`rating`) DESC;"

我们也可以像文档所说的那样定位一个关联的模型:

order: [[event_ratings, "rating", "DESC"]],

它有效,但这不是每个事件的平均评分。

编辑:
我终于用litteral来编辑它了:

顺序:[[Sequelize.literal("liked_events.number_of_participants"), "DESC"]

0 个答案:

没有答案
相关问题