如何使用GraphQL API查询两个用户的共同好友
共同好友GraphQL查询实现方案
基础结论
完全不依赖底层服务特殊功能、不使用子查询/嵌套过滤器的前提下,无法直接通过GraphQL单次查询得到共同好友结果。原生GraphQL仅支持字段级别的关联请求,没有内置集合交集计算能力,这种场景只能先分别拉取两个用户的好友列表,在客户端做交集计算。
如果允许使用通用GraphQL服务提供的基础过滤能力,可通过单次查询直接得到结果。
方案1:无服务端依赖的客户端计算实现
先发起查询同时拉取两个用户的全量好友列表:
query GetBothUsersFriends { user01: person(id: "01") { friends { id name } } user02: person(id: "02") { friends { id name } } }
拿到返回结果后,筛选同时存在于user01.friends和user02.friends数组中的Person对象,即为共同好友。
方案2:支持过滤能力的服务端直接查询
对于支持嵌套字段过滤的通用GraphQL服务,可直接通过以下查询拿到结果:
query GetCommonFriends { # 筛选用户01的好友中,自身好友列表包含用户02的人 person(id: "01") { friends(where: { friends: { id: { _eq: "02" } } }) { id name } } }
该查询逻辑等价于:找到同时和01、02存在好友关联的Person实例,也就是两个用户的共同好友。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

