我有一个看起来像这样的neo4j图:
(user)-LIKES->(Actor)
| ^
| |
FRIENDS LIKES
| |
v |
(user2)-----------
哪些州,用户2和用户喜欢演员和朋友(user2)也喜欢演员。
现在,作为演员,当我试图吸引所有喜欢Actor的朋友时,我会这样做:
START user=node(*)
MATCH (user)-[:FRIENDS]-(friend)-[like_rela:LIKES]-(actor)
WHERE user.uid=123 AND actor.id = 234
RETURN DISTINCT friend, like_rela;
以上查询返回我喜欢演员的所有用户朋友。但这并不返回用户和演员之间的关系。有没有办法将其归入同一个查询?
我正在使用Neo4j 1.9
由于
答案 0 :(得分:0)
这可能接近你所追求的目标:
MATCH (user {id:123})-[:FRIENDS]-(friend)-[f_like_rel:LIKES]->(actor {id:234})
OPTIONAL MATCH (user)-[u_rel]-(actor)
RETURN DISTINCT friend, u_rel, f_like_rel;
注意:
(user {id:123})-[:FRIENDS]-(friend)
模式是非定向的,因此FRIENDS
关系可以采用任何一种方式。(friend)-[f_like_rel:LIKES]->(actor {id:234})
模式是方向性的,因为我认为你不想捕捉碰巧喜欢你朋友的任何演员(没有感觉被回报)。u_rel
可以是FRIENDS
或LIKES
类型;如果用户与演员没有任何关系,它可以是NULL
。我将这种模式保留为无方向性,但您可能希望使其具有方向性。