Neo4j Cypher查询:俱乐部用户喜欢与朋友喜欢
我有一个neo4j图,它看起来像这样:Neo4j Cypher查询:俱乐部用户喜欢与朋友喜欢,neo4j,cypher,spring-data-neo4j,Neo4j,Cypher,Spring Data Neo4j,我有一个neo4j图,它看起来像这样: (user)-LIKES->(Actor) | ^ | | FRIENDS LIKES | | v | (user2)----------- 这说明,用户与user2是朋友,用户喜欢actor,而朋友(user2)也喜欢actor 现在,给定actor,当我试图吸引所有喜欢actor的用
(user)-LIKES->(Actor)
| ^
| |
FRIENDS LIKES
| |
v |
(user2)-----------
这说明,用户与user2是朋友,用户喜欢actor,而朋友(user2)也喜欢actor
现在,给定actor,当我试图吸引所有喜欢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
谢谢这可能很接近您的目标:
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;
注:
(用户{id:123})-[:FRIENDS]-(FRIENDS)
模式是非定向的,因此FRIENDS
关系可以走任意一条路(friend)-[f_like\u rel:LIKES]->(actor{id:234})
模式是有方向性的,因为我认为你不想捕捉任何碰巧喜欢你朋友的演员(没有这种感觉)u_rel
类型可以是FRIENDS
或LIKES
;或者,如果用户与参与者没有关系,则它可以是NULL
。我将此图案保留为非方向性,但您可能希望使其具有方向性