如何在一个 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 中编写我的请求?

解决方法

您将返回 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
}