当前位置: 首页 > 知识库问答 >
问题:

如何过滤同一查询响应中返回的字段上的GraphQL嵌套数组?或者如何在多个字段上创建GraphQL关系?

万俟穆冉
2023-03-14

所以我使用GraphQL与Hasura和阿波罗在我的Android应用程序。该应用程序与体育相关,它存储了一场比赛的多个分段中每个球员的多个得分集。我的Postgres数据库有以下表格(包含相关字段):

Match (id, other_fields...)
Segment (id, match_id, other_fields...)
Segment_Player (id, segment_id, player_id)
Player (id, other_fields...)
Score (id, segment_id, player_id, other_fields...)

Segment_Player是在SegmentPlayer表之间的一个多对多的桥接表。有数组关系从MatchSegment和从PlayerScore

我想查询一场比赛中每个球员的分数,这些分数由段分开。我想要的响应应该类似于以下结构:

Match
--Segment
----Player
------Score

我面临的问题是,我无法找到一种方法来过滤PlayerIdSegmentId上的分数<代码>玩家-分数关系可以给我该玩家的所有分数。或者我可以在分数之间创建一个关系,该关系将给出该段中每个玩家的分数。但这两种方法中的任何一种都会让我在客户端进行过滤。

我希望能够在where子句中提供作为参数返回的数据,如下所示:

query PointsQuery($matchId: String!) {
  SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
    SegmentId: id
    segment_player {
      player {
        ...PlayerQL
        scores(where: {segmentId: {_eq: SegmentId}}) {
          ...ScoreQL
        }
      }
    }
  }
}

如何在不过滤客户端数据的情况下实现这一点。

共有1个答案

季阳朔
2023-03-14

我知道这太晚了,但是查询将按原样工作,没有第二个where子句

query PointsQuery($matchId: String!) {
  SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
    SegmentId: id
    segment_player {
      player {
        ...PlayerQL
        scores {
          ...ScoreQL
        }
      }
    }
  }
}

因为你只会得到与该段相关的球员,然后你只会得到与该段球员相关的分数。

如果分数实际上与某个段相关,并且您希望该段的所有分数,而不是该段球员的所有分数,那么您应该添加另一个关系

query PointsQuery($matchId: String!) {
  SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
    SegmentId: id
    score {
      ...ScoreQL
    }
    segment_player {
      player {
        ...PlayerQL
      }
    }
  }
}
 类似资料:
  • 我正在努力学习GraphQL( 我只得到一级字段,比如: 以下是我的模式: 我的解析器: 知道我做错了什么吗?

  • 问题内容: 我在Google Cloud Firestore中的查询条件有问题。 下面是我的代码,以获得第一个以HA_开头的文档并按ID DESC排序 我想获取文章ID为“ HA_”或“ XE_”开头的文章的最后ID 例如上图: if(articleId以“ HA_”开头)=>返回id 831的对象 if(articleId以“ XE_”开头)=>返回ID为833的对象 现在我得到一个错误 jav

  • 如何对同一嵌套下的多个字段执行“必须”“匹配”查询?这是一个可复制的ES索引,其中“用户”字段定义为“嵌套”类型。 这里有2份文件: 对于这个索引,如何查询“John”和“Alice”都存在的文档?使用上面定义的索引,我希望得到的是文档1,而不是文档2。到目前为止,我已经尝试了以下代码,但没有收到任何结果:

  • 最近我开始研究GraphQL,我能够在平面模式中插入数据,没有任何问题,但是当涉及到数据数组时,我会遇到如下错误 我正在用postman测试我的查询,我的变异查询是 这是我的事件模式: 猫鼬模式: 突变类型:

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga