将循环列表查询与特定参数查询相结合

Combining a looping listing query with specific parameters query

我有两个单独的工作调用,定义如下,我正试图弄清楚如何组合它们。该模式特定于 Meetup API,,但我认为通用的 GraphQL-fu 可以在这里提供帮助!

query($query:String!,$lat: Float!,$lon:Float!,$radius:Int!) {
    keywordSearch(filter: {query: $query,lat: $lat, lon: $lon, radius:$radius source:EVENTS, eventType:PHYSICAL}) {
      count 
      edges{
        node{
          id
        }
      } 
    }
}

作为示例查询: {"query":"knitting ","lat":37.774929,"lon":-122.419418,"radius":50}

结果如下(编织聚会在旧金山并不常见):

{
  "data": {
    "keywordSearch": {
      "count": 3,
      "edges": [
        {
          "node": {
            "id": "281538648!chp"
          }
        },
        {
          "node": {
            "id": "281467251!chp"
          }
        },
        {
          "node": {
            "id": "281455979!chp"
          }
        }
      ]
    }
  }
}
  query($eventId: ID) {
    event(id: $eventId) {
      ... bare_event
    }
  }
  
  fragment bare_event on Event{
    title 
      dateTime
      eventUrl
      onlineVenue{
        type
        url
      }
      venue{
                ... bare_venue
      }
  }
  
  fragment bare_venue on Venue{
        id
        name
        address
  }
  

因此,例如,使用 {"eventId":"281538648!chp"} 从 Call1 获取第一个 ID,我们得到

{
  "data": {
    "event": {
      "title": "Monday Knitting Meetup (Mountain View)",
      "dateTime": "2021-10-25T19:00-07:00",
      "eventUrl": "https://www.meetup.com/scv-knitters/events/281538648",
      "onlineVenue": null,
      "venue": {
        "id": "25006220",
        "name": "Panera Bread (YET ANOTHER PANERA!!)",
        "address": "1035 El Monte Ave"
      }
    }
  }
}

我们如何在调用 1 中包含调用 2 的详细事件信息以及每个事件 ID?

我认为 GraphQL 的意义在于,我不必进行 N+1 查询来获取与搜索列表相关的 N 项的附加信息(我是新手!)

如何将这两个调用组合到一个查询中,以便除了仅提取事件 ID 之外,我还可以为每个搜索列表提取其他事件信息?

这是查询以及如何获取数据

query ($query: String!, $lat: Float!, $lon: Float!, $radius: Int!) {
  keywordSearch(
    filter: {query: $query, lat: $lat, lon: $lon, radius: $radius, source: EVENTS, eventType: PHYSICAL}
  ) {
    count
    edges {
      node {
        id
        result {
          ... on Event {
            title
            dateTime
            eventUrl
            onlineVenue {
              type
              url
            }
            venue {
              id
              name
              address
            }
          }
        }
      }
    }
  }
}
{
  "query": "knitting ",
  "lat": 37.774929,
  "lon": -122.419418,
  "radius": 50
}