首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个游标传递给具有多个节点ids的单个GitHub GraphQL查询?

如何将多个游标传递给具有多个节点ids的单个GitHub GraphQL查询?
EN

Stack Overflow用户
提问于 2021-04-17 04:00:52
回答 1查看 132关注 0票数 1

我正在尝试批处理GraphQL查询,以便从具有相同请求的多个存储库中检索所需的数据,其中每个存储库都有不同的游标。

假设我有3个节点的I,并且只有2个游标,映射如下:

代码语言:javascript
复制
NODE_ID_1 <-> CURSOR_X
NODE_ID_2 <-> Empty
Node_ID_3 <-> CURSOR_Y

如何填充GraphQL查询,以便可以查询所有3个节点,但传递它们各自的游标?

代码语言:javascript
复制
query {
  nodes(ids: ["NODE_ID_1", "NODE_ID_2", "NODE_ID_3"]) {
    ... on Repository {
      databaseId
      stargazers(first: 100, after:???) {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-17 05:56:40

您可以通过迭代节点来使用aliases,并将它们映射到像nodeX这样的字段名:

代码语言:javascript
复制
{
  node1: node(id: "MDEwOlJlcG9zaXRvcnkxMDQ4MzQ4") {
    ... on Repository {
      ...Repo
    }
  }
  node2: node(id: "MDEwOlJlcG9zaXRvcnkyMzE5NDk4") {
    ... on Repository {
      ...Repo
    }
  }
  node3: node(id: "MDEwOlJlcG9zaXRvcnkyMzI1Mjk4") {
    ... on Repository {
      ...Repo
    }
  }
}

fragment Repo on Repository {
  name
}

输出:

代码语言:javascript
复制
{
  "data": {
    "node1": {
      "name": "DROP5.0"
    },
    "node2": {
      "name": "subsurface"
    },
    "node3": {
      "name": "linux"
    }
  }
}

对于游标值,您只需要将字段名称映射到节点id和游标值:

代码语言:javascript
复制
{
  node1: node(id: "MDEwOlJlcG9zaXRvcnkyMzE5NDk4") {
    ... on Repository {
      name
      stargazers(first: 1, after:"Y3Vyc29yOnYyOpIAzR1p") {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
  node2: node(id: "MDEwOlJlcG9zaXRvcnkxMDQ4MzQ4") {
    ... on Repository {
      name
      stargazers(first: 1, after: null) {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
  node3: node(id: "MDEwOlJlcG9zaXRvcnkyMzI1Mjk4") {
    ... on Repository {
      name
      stargazers(first: 1, after:"Y3Vyc29yOnYyOpIAzQzi") {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
}

在这种情况下,输入映射将如下所示:

代码语言:javascript
复制
input = {
    "node1": {
        "id": "MDEwOlJlcG9zaXRvcnkyMzE5NDk4",
        "cursor": "Y3Vyc29yOnYyOpIAzR1p"
    },
    "node2": {
        "id": "MDEwOlJlcG9zaXRvcnkxMDQ4MzQ4",
        "cursor": null
    },
    "node3": {
        "id": "MDEwOlJlcG9zaXRvcnkyMzI1Mjk4",
        "cursor": "Y3Vyc29yOnYyOpIAzQzi"
    }
}

使用变量:

代码语言:javascript
复制
query ($id1: ID!, $cursor1: String, $id2: ID!, $cursor2: String, $id3: ID!, $cursor3: String) {
  node1: node(id: $id1) {
    ... on Repository {
      name
      stargazers(first: 1, after: $cursor1) {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
  node2: node(id: $id2) {
    ... on Repository {
      name
      stargazers(first: 1, after: $cursor2) {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
  node3: node(id: $id3) {
    ... on Repository {
      name
      stargazers(first: 1, after: $cursor3) {
        pageInfo {
          endCursor
        }
        edges {
          starredAt
        }
      }
    }
  }
}

变量:

代码语言:javascript
复制
{
  "id1": "MDEwOlJlcG9zaXRvcnkyMzE5NDk4",
  "cursor1": "Y3Vyc29yOnYyOpIAzR1p",
  "id2": "MDEwOlJlcG9zaXRvcnkxMDQ4MzQ4",
  "cursor2": null,
  "id3": "MDEwOlJlcG9zaXRvcnkyMzI1Mjk4",
  "cursor3": "Y3Vyc29yOnYyOpIAzQzi"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67131530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档