将循环列表查询与特定参数查询相结合
Combining a looping listing query with specific parameters query
我有两个单独的工作调用,定义如下,我正试图弄清楚如何组合它们。该模式特定于 Meetup API,,但我认为通用的 GraphQL-fu 可以在这里提供帮助!
- 调用 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
}
}
}
}
作为示例查询:
{"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"
}
}
]
}
}
}
- 调用 2 从调用 1
返回的 id
中获取额外的事件信息
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
}
我有两个单独的工作调用,定义如下,我正试图弄清楚如何组合它们。该模式特定于 Meetup API,,但我认为通用的 GraphQL-fu 可以在这里提供帮助!
- 调用 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
}
}
}
}
作为示例查询:
{"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"
}
}
]
}
}
}
- 调用 2 从调用 1 返回的
id
中获取额外的事件信息
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
}