Hasura嵌套对象过滤:满足单个交易条件的用户是否会被统计?
Hasura嵌套对象过滤结果说明
当使用Hasura基于嵌套对象进行过滤时,只要父对象关联的嵌套对象中至少有一个满足过滤条件,对应的父对象就会被纳入结果集。
针对你提供的GraphQL查询:
query GetUsersAndRevenues { User_aggregate( where: { transactions: {timestamp: {_gte: 1743465600, _lte: 1751328000}} } ) { aggregate { count(columns: [address], distinct: true) } } }
Hasura会返回选项1的结果:拥有至少一笔交易的timestamp处于指定时间范围内的User实体统计数。
逻辑说明
这种过滤逻辑等价于SQL中的EXISTS子查询:只要某个用户存在任意一条交易记录的时间戳落在指定区间内,该用户就会被统计。如果需要统计“所有交易的时间戳都处于指定范围”的用户,需要调整过滤条件(比如用_not排除存在不符合时间范围交易的用户)。
对应的GraphQL Schema:
type User @entity(immutable: false) { id: ID! address: Bytes! chainId: BigInt! isOnlyAirdropClaimer: Boolean! transactions: [UserTransaction!]! @derivedFrom(field: "user") } type UserTransaction @entity(immutable: true) { id: ID! block: BigInt! fee: Float! hash: Bytes! isAirdropClaim: Boolean! timestamp: BigInt! user: User! }
内容的提问来源于stack exchange,提问作者Paul Razvan Berg
相关产品推荐
相关产品推荐

