Neo4j Cypher查询:俱乐部用户喜欢和朋友一样喜欢

时间:2014-04-21 23:33:13

标签: neo4j cypher spring-data-neo4j

我有一个看起来像这样的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

由于

1 个答案:

答案 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;

注意:

  1. 上述(user {id:123})-[:FRIENDS]-(friend)模式是非定向的,因此FRIENDS关系可以采用任何一种方式。
  2. 然而,(friend)-[f_like_rel:LIKES]->(actor {id:234})模式是方向性的,因为我认为你不想捕捉碰巧喜欢你朋友的任何演员(没有感觉被回报)。
  3. u_rel可以是FRIENDSLIKES类型;如果用户与演员没有任何关系,它可以是NULL。我将这种模式保留为无方向性,但您可能希望使其具有方向性。