在Neo4J中,我有以下示例,用户彼此感兴趣。有两个连接,因为每个用户可以分别设置权重因子,并且某些用户可能彼此不感兴趣。
我想编写一个Cypher查询,该查询可以检索用户的相关用户,但还可以告诉我哪些用户已连接。
例如,对于用户Fred,返回Tom,Jane,还返回Jane对Tom感兴趣。鲍勃和莎拉不应该回来。
这是我到目前为止所拥有的:
MATCH (u:User)-[r1:INTERESTED_IN]->(u2:User)
WHERE u.emailAddress ='fred@mail.com'
OPTIONAL MATCH (u)-[r2:INTERESTED_IN]->(u3:User)
OPTIONAL MATCH (u2)-[r3:INTERESTED_IN]->(u3)
RETURN u, r1, u2, r2, u3, r3
是沿着正确的路线吗?我想将此映射到Spring Neo4J存储库方法,但要确保查询正确,并且能够导航对象图以显示上面的信息。
任何帮助将不胜感激。
答案 0 :(得分:1)
这可能会做您想要的:
MATCH (u:User)-[:INTERESTED_IN]->(u2:User)
WHERE u.emailAddress = 'fred@mail.com'
OPTIONAL MATCH (u)-[:INTERESTED_IN]->(u3:User)<-[:INTERESTED_IN]-(u2)
RETURN u, u2, COLLECT(u3) AS mutualInterests
它在每个结果行中返回u
(即u2
)的利益以及他们的共同利益。