Neo4j/GraphQL-获取链表中的最后一个节点,以便使用新创建的节点继续链表
我有一个组中帖子的链接列表。一个组有一个第一个\u POST和随后的下一个\u POST关系。GraphQL typedef如下所示: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: &
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等。帖子节点与组没有任何其他关系。