Neo4j / GraphQL-获取链表中的最后一个节点,以便使用新创建的节点继续链表

问题描述

我在一个论坛中有一个链接列表。组具有FIRST_POST,然后具有后续的NEXT_POST关系。 GraphQL typedef看起来像这样:

type Group {
    id: ID!
    name: String!
    membersList: [User] @relation(direction: IN,name: "MEMBER_OF")
    engagesIn: Conversation @relation(direction: OUT,name: "ENGAGES_IN")
    posts: [Post] @cypher(statement: """
        MATCH (g:Group {id: this.id})-[:FIRST_POST|NEXT_POST*]->(post:Post) 
        RETURN post
    """)
    createdAt: DateTime
    updatedAt: DateTime
}

密码查询MATCH (g:Group {id: this.id})-[:FIRST_POST|NEXT_POST*]->(post:Post) RETURN post返回特定论坛的所有帖子。我想创建一个新的Post并将其添加到我的架构的typedef中的Group中。我知道这是不对的,但是我目前的努力是在这里:

CreatePost(body: String!,userId: ID!): Post
    @cypher(
      statement: """
        MATCH (u:User {id: $userId})-[:MEMBER_OF]->(g:Group)-[:FIRST_POST|NEXT_POST*]->(lp:Post) return Last(collect(p))
        CREATE (p:Post { id: apoc.create.uuid(),body: $body,createdAt: datetime(),updatedAt: datetime() }) 
        WITH p,lp
        MATCH (u:User)
        WHERE u.id = $userId 
        CREATE (p)<-[:WROTE]-(u)
        CREATE (p)-[:NEXT_POST]->(lp)
        RETURN u,p
    """)

这是一个自定义变量,它接受post正文和userId参数。此行MATCH (u:User {id: $userId})-[:MEMBER_OF]->(g:Group)-[:FIRST_POST|NEXT_POST*]->(lp:Post) return Last(collect(p))将返回最后一个帖子,尽管我知道我无法返回此处,并且还没有成功找到对MATCH进行别名的方法。最终,我需要使用CREATE (p)-[:NEXT_POST]->(<LAST POST IN GROUP>)在该组中的最后一个NEXT_POST中创建NEXT_POST关系。第一行还使用userId来查找组,因为“用户是MEMBER_OF”仅是一个组,“帖子”仅属于一个组。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)