【发布时间】:2016-04-02 04:13:03
【问题描述】:
我有一个图表,用户可以有一个帖子,也可以有一个朋友有一个帖子,这个朋友可以关注也可以不关注。
如何查询用户和他关注的朋友的所有帖子?
我试过这个:
" MATCH (u1:User)-[:POSTED]->(p1:Post)"
+ " WHERE u1.username =~ '"+user+"'"
+ " OPTIONAL MATCH (u3:User)-[:FOLLOWING]->(u2:User)-[:POSTED]->(p2:Post),"
+ " (u3:User)-[:FRIEND_OF]->(u2:User)"
+ " WHERE u3.username =~ '"+user+"' return u1.username, u1.name,"
+ "p1 ,u2.username, u2.name , p2";
但是这个查询返回重复,假设我们有我们的用户和朋友。
朋友有一个帖子,用户有两个,对于每个 MATCH,查询返回朋友的帖子两次,查询还返回 OPTIONAL MATCH 的结果。
进一步解释:
(u:User)-[:POSTED]->(p:Post)
(u:User)-[:FRIEND_OF]->(u2:User)
(u:User)-[:FOLLOWING]->(u2:User)-[:POSTED]->(p2:Post)
这些是存在的关系,我想要的是所有满足这些关系的帖子 (:Post),没有重复,最好是单个查询。
【问题讨论】: