首页 > 解决方案 > 如何在一个 GraphQL 请求中返回多个结果?

问题描述

我有一个 GRANDstack 应用程序。

对于这个应用程序,我在 Neo4j 中有一个 Cypher 请求,如下所示:

MATCH (c:CLUSTER)
WITH c
ORDER BY c.cluster_score DESC
LIMIT 5
MATCH (c)<-[:HAS_CLUSTER]-(a:ARTICLE)
WITH c,a
ORDER BY a.article_score  DESC
RETURN c, collect(a)[..5] as articles

它返回每个集群中最好的文章。我必须在我的 React 界面中显示这个。我想在 GraphQL 中实现这个,但我不知道如何编码,因为我在这个请求中返回了 2 个东西。

如何在 GraphQL 中编写我的请求?

标签: graphqlgrandstack

解决方案


您正在返回 2 个值carticles但是无法在 GraphQL 类型中表示它。做一个中介类型,我称之为我的Intermediary

type CLUSTER {
   id: ID
}

type ARTICLE {
   id: ID
}

type Intermediary {
}

并在类型上嵌入你的CLUSTERARTICLE作为字段;

type Intermediary {
  cluster: CLUSTER 
  article: ARTICLE
}

@cypper然后在你的指令所在的地方使用这种类型;

type Query {
  myQuery: Intermediary @cypher(...)
}

从密码查询中投影值时,会返回一个表示您的Intermediary类型的对象;

MATCH (c:CLUSTER)
WITH c
ORDER BY c.cluster_score DESC
LIMIT 5
MATCH (c)<-[:HAS_CLUSTER]-(a:ARTICLE)
WITH c,a
ORDER BY a.article_score  DESC
WITH c, collect(a)[..5] as articles
RETURN {
    cluster: c,
    articles: articles
}

推荐阅读