2016-11-10 115 views
1

我开发一个小型的社交网络应用和我在我的Neo4j图形分贝以下节点和关系:Neo4j的比赛节点和关系,如果存在

  1. 用户节点
  2. 后的节点。 Post节点通过POSTED_BY关系连接到User节点,Post节点可能通过SHARING关系连接到另一个Post节点,以防帖子共享另一个帖子。

我想检索由特定用户发布的所有帖子,并且每个帖子在获得原始帖子的情况下还可以获得原始帖子(以及原始帖子的发布者)。

我设法使用可选的比赛,以获得所需的信息,但我是新来的Neo4j,不知道这是要走的正确方法:

match (p:Post)-[r: POSTED_BY]-(publisher:User) 
where publisher.userId = {userId} 
optional match (p:Post)-[r2: SHARED_POST]-(sharedPost:Post)-[r3: POSTED_BY]-(sharedPostPublisher: User) 
return p as post,publisher, sharedPost, sharedPostPublisher 

这是为了获取这个信息的正确方法还是应该我使用其他方法?

回答

1

除了缺乏关系方向,它看起来很好。

缺乏方向的情况当然是略少言自明的(即使有一个隐含的方向,因为User不是POSTED_BYPost),但它也改变了查询的语义:因为​​关系可以在任何方向上都可以遍历,当然,如果有股票,您将获得原始帖子,但如果它是原始帖子,您也将获得所有股份。这不是你说的你想要的。

相关问题