【问题标题】:Aggregate data from a nested model in sequelize在 sequelize 中聚合来自嵌套模型的数据
【发布时间】:2019-07-08 07:31:44
【问题描述】:

我有 3 个表,其关联如下。

STUDENTS.hasMany(REPORTS);

REPORTS.belongsTo(STUDENTS);
REPORTS.hasMany(TASKS);


TASKS.belongsTo(REPORTS);

任务表

| id | name   | report_id   |
|----|--------|-------------|
| 01 | taskA  |         01  |
| 02 | taskB  |         02  |
| 03 | taskC  |         03  |

报告表

| id | student_id |
|----|------------|
| 01 |        01  |
| 02 |        02  |
| 03 |        01  |

学生桌

| id | name |
|----|------|
| 01 | tom  |
| 02 | jim  |

我正在尝试创建如下所示的输出。在这里,我有学生的姓名以及他们完成的任务数量(通过报告表链接)。

| student| no_of_tasks |
|--------|-------------|
|   tom  |         01  |
|  jim   |         02  |

以下是我尝试使用 sequelize 的查询,但它似乎不起作用。

STUDENTS.findAll({
  attributes: [
    'name',
  ],
  include: [
    {
      model: REPORTS,
      attributes: [
        [sequelize.fn('COUNT', sequelize.col('tasks.id')), 'no_of_tasks'],
      ],
      include: [
        {
          model: TASKS,
          attributes: [],
        },
      ],
    },
  ],
  raw: true,
  nest: true,
});

我知道可以使用原始 sql 查询获得此解决方案 但我希望使用 Sequelize js ORM 找到答案。

【问题讨论】:

  • 不确定这是否能解决您的问题,但我认为您应该通过 nested: true 而不是 nest: true

标签: mysql node.js express sequelize.js


【解决方案1】:

我不确定nested: true 的意图是什么...但是对于这个查询,您缺少分组依据。与raw: true,同级添加

group: ['name'],

对于这类问题,可以通过复制sequelize生成的SQL并粘贴到MySqlWorkbench之类的东西来调试,看看有什么问题。

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2021-06-05
    • 2020-11-04
    相关资源
    最近更新 更多