Hasura中含整数数组列的表与其他表关联及用户数查询方法
Hasura整数数组列关联与用户计数实现
前提假设
假设你的表结构如下:
- Users表:包含主键
id,以及product_ids(integer[]类型,存储用户关联的产品ID列表) - Products表:包含主键
id、name字段
方法一:通过自定义SQL函数实现计数
- 创建统计用户数的SQL函数
在数据库中执行以下SQL,创建稳定函数统计指定产品的关联用户数量:
CREATE OR REPLACE FUNCTION count_users_for_product(product_id integer) RETURNS integer AS $$ SELECT COUNT(*) FROM users WHERE product_id = ANY(users.product_ids); $$ LANGUAGE sql STABLE;
- 在Hasura中配置计算字段
- 打开Hasura控制台,进入Products表的修改页面
- 找到「计算字段」选项,点击「添加计算字段」
- 选择刚才创建的
count_users_for_product函数,将字段名设置为number_of_users,参数绑定为Products表的id字段
- 编写GraphQL查询
直接查询目标格式的数据:
query { products { id name number_of_users } }
方法二:通过手动创建数组关系实现计数
- 在Hasura中创建数组关系
- 进入Products表的修改页面,找到「关系」选项,点击「添加关系」
- 关系类型选择「数组关系」,关联到Users表
- 关联条件设置为:
Users.product_ids @> ARRAY[Products.id]::integer[](即Users表的product_ids数组包含当前产品ID) - 将关系命名为
related_users
- 编写带聚合计数的查询
通过聚合查询获取用户数量,可使用别名匹配目标字段名:
query { products { id name number_of_users: related_users_aggregate { aggregate { count } } } }
内容的提问来源于stack exchange,提问作者MrCorn
相关产品推荐
相关产品推荐

