问题描述
我在一个论坛中有一个链接列表。组具有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 (将#修改为@)