You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize查询结果中访问count字段返回undefined问题求助

问题解决:Sequelize聚合字段count无法直接访问返回undefined

核心原因

Sequelize默认返回的是Model实例对象,而非普通JSON对象。你通过聚合函数生成的自定义字段(如count、maxLevel)不会直接作为实例的顶层属性存在,而是存储在实例内部的dataValues对象中。直接打印实例时会自动展示dataValues的内容,所以看起来有count字段,但直接通过.访问会返回undefined。

解决方案

方案1:返回纯JSON对象(推荐)

在findAll的配置中添加raw: true选项,查询结果会直接返回普通JavaScript对象,就能正常访问count字段:

const users = await models["account"].findAll({
  raw: true, // 新增该选项
  subQuery: false,
  where: params.search && {
    [Op.or]: [
      { first_name: { [Op.like]: `%${params.search}%` } },
      { last_name: { [Op.like]: `%${params.search}%` } },
      { email: { [Op.like]: `%${params.search}%` } },
    ],
  },
  include: [
    {
      model: models["kyc_verification"],
      as: "kyc_verifications",
      include: [
        {
          model: models["kyc_verification_level"],
          as: "kyc_verification_level",
        },
      ],
      attributes: [
        [models.sequelize.fn("COUNT", "*"), "count"],
        [
          models.sequelize.fn(
            "MAX",
            models.sequelize.col(
              "kyc_verifications.kyc_verification_level.index"
            )
          ),
          "maxLevel",
        ],
      ],
    },
  ],
  group: ["account.id"],
  having: params.level && {
    "kyc_verifications.maxLevel": params.level,
  },
  order: [["created_at", "DESC"]],
  limit: 100,
  offset,
});

return users[0].kyc_verifications[0].count; // 现在可正常访问

方案2:通过实例get()方法访问字段

如果需要保留Model实例(比如后续要调用实例方法),可以使用Sequelize实例提供的get()方法获取聚合字段:

return users[0].kyc_verifications[0].get('count');

额外注意点

你的查询group仅指定了account.id,但包含了kyc_verification_level的关联数据,这在部分数据库(如PostgreSQL)中可能触发SQL语法错误(非聚合字段需包含在GROUP BY中)。若后续出现查询报错,需调整group配置,添加关联表的必要主键字段,示例:

group: ["account.id", "kyc_verifications.id", "kyc_verifications->kyc_verification_level.id"]

内容的提问来源于stack exchange,提问作者Preshy Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:40:08