【问题标题】:Neo4j Cypher query : Club users likes with friends likeNeo4j Cypher 查询:俱乐部用户喜欢与朋友喜欢
【发布时间】:2014-04-21 23:33:12
【问题描述】:

我有一个看起来像这样的 neo4j 图表:

  (user)-LIKES->(Actor)
    |              ^
    |              |
  FRIENDS         LIKES
    |              |
    v              |
  (user2)-----------

这说明,用户与 user2 成为朋友,用户喜欢演员,朋友 (user2) 也喜欢演员。

现在,给定演员,当我尝试拉出所有喜欢演员的用户朋友时,我会这样做:

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

谢谢

【问题讨论】:

    标签: neo4j cypher spring-data-neo4j


    【解决方案1】:

    这可能与您所追求的接近:

    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。我将此模式设为非定向,但您可能希望使其定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2012-09-18
      • 1970-01-01
      相关资源
      最近更新 更多