如何使所有节点保持一定距离?

时间:2020-04-08 15:11:02

标签: database graph neo4j

我目前是Neo4J的初学者。

我的图目前看起来像这样: My graph

我想从某个距离一定的用户那里获取所有的用户(红色节点)。 假设我希望所有用户与“ Antoine”的距离为2。 目前,我收到了以下请求:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE]->(e1:Event)<-[:PARTICIPATE]-(u2:User)-[:PARTICIPATE]->(e2:Event)<-[:PARTICIPATE]-(u3:User)
RETURN u3

是否可以为该请求添加一些通用性?如果我想让所有用户都走得更远,那么请求将是肮脏的...

我认为这不是正确的方法。有没有更好的方法可以实现我的目标?

1 个答案:

答案 0 :(得分:1)

您需要使用variable-length pattern matching

对于您的图形,您需要遍历2:PARTICIPATE关系才能到达另一个:User节点,因此我们可以(通过单个连接节点)表示相邻用户,如:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*2]-(u2:User)
RETURN u2

并使用户更远一些,例如:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*4]-(u3:User)
RETURN u3

我们可以通过使用可变长度模式上的一个范围(包括2至4个跃点)来获得这两者的集合:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*2..4]-(user:User)
RETURN user
相关问题