您可以在 GraphQL 架构的 @cypher 指令中使用 RETURN AS 吗?

Can you use RETURN AS within the @cypher Directive in your GraphQL Schema?

假设我有一个简单的模式,只有一个 Person 类型:

// schema.graphql

type Person {
    Name: String,
    Age: Int,
    parents: [Person!]! @relationship(type: "PARENT", direction: OUT)
}

我想要一个查询,通过遍历“PARENT”关系两次,获取每个人的名字和祖父母的名字。在 Cypher 中,我会这样写:

MATCH (child:Person)-[:PARENT]->[parent:Person]-[:PARENT]->(grandparent:Person)
RETURN child.Name AS child_name, grandparent.Name AS grandparent_name

是否可以在我的 graphQL 查询的 @cypher 指令中使用此密码查询?目标是在 cypher 中进行“遍历”以获取祖父母的名字,然后 return 直接使用 child 的名字,而不是必须遍历 GraphQL 响应来获取它,我如果我只是 returned child.

就需要做

我的想法是为这个查询return定义一个新类型,比如:

// schema.graphql

type Child_Grandparent_Pair{
    child_name: String,
    grandparent_name: String
}

然后像这样编写我的 GraphQL 查询:

// schema.graphql

type Query{
    getChildrenAndGrandparentsNames:[Child_Grandparent_Pair]
    @cypher(
        statement: "MATCH (child:Person)-[:PARENT]->[parent:Person]-[:PARENT]->                    
    (grandparent:Person)
        RETURN child.Name AS child_name, grandparent.Name AS grandparent_name"
    }
}

但这似乎不起作用。当我尝试查询我的新查询类型时,我从 neo4j 收到一条错误消息,指出未定义 return 类型。希望这对我正在尝试做的事情有意义。有没有更好的方法?

Return 与您的 GraphQL 类型的形状匹配的 Object/Map:

type Query {
    getChildrenAndGrandparentsNames: [Child_Grandparent_Pair]
        @cypher(
            statement: """
             MATCH (child:Person)-[:PARENT]->[parent:Person]-[:PARENT]->(grandparent:Person)
-            RETURN child.Name AS child_name, grandparent.Name AS grandparent_name
+            RETURN { child_name: child.name, grandparent_name: grandparent.name }
            """
        )
}