首页 > 解决方案 > SEQUELIZE:按关联模型的 COUNT 排序

问题描述

我目前有一个返回数组的查询,Projects它还包括一个名为Campaign. 我的Campaign模型有一个名为的列status,它是ACTIVEor PAUSED。对于Project我的数组中的每个,我想接收ACTIVE它包含的所有活动的计数,然后我想Projects根据该计数以降序排列我的数组。

换句话说,我希望所有ProjectswithACTIVE活动都出现在我的查询完成后收到的数组的顶部。

const query = { id: { $in: ids } };

models.Project.findAndCountAll({
  where: query,
  limit: PROJECT_PAGE_SIZE,
  offset: (PROJECT_PAGE_SIZE * (pageNumber - 1)),
  distinct: true,
  attributes: Object.keys(models.Project.attributes).concat([
    [sequelize.literal('(SELECT SUM("strategies_data"."spend") FROM "strategies_data" WHERE "strategies_data"."project_id" = "Project"."id")'),
      'total_spend'],
    [sequelize.literal('(SELECT SUM("strategies_data"."impressions") FROM "strategies_data" WHERE "strategies_data"."project_id" = "Project"."id")'),
      'total_impressions'],
  ]),
  include: [{
    model: models.Campaign,
    attributes: ['id', 'name', 'status'],
    include: [{ model: models.Channel }, { model: models.Strategy }],
  }],
})

标签: javascriptsqljsonpostgresqlsequelize.js

解决方案


推荐阅读