用户可以是其他用户的朋友。用户还可以关注用户个人资料页面。我想查询所有朋友和follow_users(拥有所关注个人资料页面的用户)
返回follow_users
match (user:User {id: SOME_ID})
-[:FOLLOWED_PAGE]->(Page)<-[:PROFILE_PAGE]-(followed_user:User)
return followed_user
这回归朋友
match (u:User {uuid: SOME_ID})-[:CONNECTED_USER]->(friend:User)
return friend
这将结合两者
match (user:User {id: SOME_ID})
-[:FOLLOWED_PAGE]->(Page)<-[:PROFILE_PAGE]-(followed_user:User)
return followed_user
UNION ALL match (u:User {uuid: SOME_ID})-[:CONNECTED_USER]->(friend:User)
return friend
问题是,我想继续查询。联盟将返回。
这是我想要做的,但它不起作用(第二场比赛覆盖了第一场比赛)
match (user:User {id: SOME_ID})
-[:FOLLOWED_PAGE]->(Page)<-[:PROFILE_PAGE]-(friend:User)
match (user)-[:CONNECTED_USER]->(friend:User)
WHERE (page:Page)<-[:COMMENTED_ON]-(friend)
return page
我该怎么办?
编辑:Stefan Armbruster初始设置查询:
create (PP:Page {title: "Jim"}), (Jim:User {name: "Jim"}), (You:User {name: "You"}), (Frank:User {name: "Frank"}), (Jimpost:Post {title: "Jim posted this, You follow his page"}), (Frankpost:Post {title: "Frank posted this, You are his friend (connected_to)"}),
(You)-[:CONNECTED_USER]->(Frank),
(Frank)-[:CONNECTED_USER]->(You),
(You)-[:BOOKMARKED_PAGE]->(PP),
(PP)<-[:PROFILE_PAGE]-(Jim),
(Jimpost)<-[:POSTED]-(Jim),
(Frankpost)<-[:POSTED]-(Frank)
你是“你”。弗兰克是你的“朋友”(CONNECTED_USER)。您已将“Jim”的个人资料页面(页面)添加为书签。因此,我希望能够使用“朋友”和“关注”(用户已为用户添加书签的个人资料页面)用户进行查询。在这个例子中,他们都发布了一个页面,但用例并不仅仅是发布的页面
答案 0 :(得分:1)
您需要使用逗号,
来创建复合模式:
match (user:User {id: SOME_ID})-[:FOLLOWED_PAGE]->(Page)<-[:PROFILE_PAGE]-(friend:User),
(user)-[:CONNECTED_USER]->(friend:User),
(page:Page)<-[:COMMENTED_ON]-(friend)
return page
逗号基本上构建了一个单一的模式。单独的部分通过常用的标识符(此处为user, page, friend
)连接。