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

Neo4j/GraphQL-获取链表中的最后一个节点,以便使用新创建的节点继续链表,neo4j,graphql,cypher,graph-databases,neo4j-graphql-js,Neo4j,Graphql,Cypher,Graph Databases,Neo4j Graphql Js,我有一个组中帖子的链接列表。一个组有一个第一个\u POST和随后的下一个\u POST关系。GraphQL typedef如下所示: type Group { id: ID! name: String! membersList: [User] @relation(direction: IN, name: "MEMBER_OF") engagesIn: Conversation @relation(direction: OUT, name: &

我有一个组中帖子的链接列表。一个组有一个第一个\u POST和随后的下一个\u 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
}
cypher查询
MATCH(g:Group{id:this.id})-[:FIRST_POST | NEXT_POST*]->(POST:POST)RETURN POST
返回特定组的所有帖子。我想创建一个新帖子,并将其添加到模式的typedef中的组中。我知道有一个尝试是不正确的,但我目前的努力是:

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
    """)
CreatePost(body:String!,userId:ID!):Post
@密码(
声明:“”
匹配(u:User{id:$userId})-[:MEMBER_OF]->(g:Group)-[:FIRST_POST | NEXT_POST*]->(lp:POST)返回Last(collect(p))
CREATE(p:Post{id:apoc.CREATE.uuid(),body:$body,createdAt:datetime(),updatedAt:datetime()})
带p,lp
匹配(u:用户)
其中u.id=$userId
创建(p)(lp)
返回u,p
""")

这是一个接受post body和userId参数的自定义变体。这一行
MATCH(u:User{id:$userId})-[:MEMBER_OF]->(g:Group)-[:FIRST_POST | NEXT_POST*]->(lp:POST)return Last(collect(p))
将返回最后一篇文章,尽管我知道我无法返回这里,也没有成功找到匹配的别名。最终,我需要使用
CREATE(p)-[:NEXT\u POST]->()
在该组中的最后一篇下一篇文章的基础上创建下一篇文章的关系。第一行还使用userId来查找组,因为用户只是一个组的成员,而帖子只属于一个组。

因此,我有些困惑。其他人创建了模式,其中第一篇文章是最近创建的文章,而不是创建的第一篇文章。将其重命名为最新发布,我无法执行以下操作:

MATCH (u:User {id: $userId})-[:MEMBER_OF]->(g:Group)-[rel:NEWEST_POST]->(previousNewestPost:Post)
DELETE rel
CREATE (p:Post { id: apoc.create.uuid(), body: 'test new post', createdAt: datetime(), updatedAt: datetime() }) 
WITH p, g, previousNewestPost
MATCH (u:User)
WHERE u.id = $userId 
CREATE (p)<-[:WROTE]-(u)
CREATE (p)<-[:NEWEST_POST]-(g)
CREATE (p)-[:NEXT_POST]->(previousNewestPost)
RETURN u, p
MATCH(u:User{id:$userId})-[:MEMBER\u OF]->(g:Group)-[rel:NEWEST\u POST]->(previousnewest POST:POST)
删除rel
CREATE(p:Post{id:apoc.CREATE.uuid(),body:'testnewpost',createdAt:datetime(),updatedAt:datetime()})
用p,g,上一个newestpost
匹配(u:用户)
其中u.id=$userId

创建(p)尝试引入指向最新帖子的指针关系->谢谢!现在调查一下。是的,我们可能会奇怪地设置组到帖子的关系只是线性的,即Group->FIRST\u Post->NEXT\u Post->NEXT\u Post等。帖子节点与组没有任何其他关系。