三个节点之后连接到另一个节点的一个节点和第二个节点之间有什么区别?

时间:2015-05-07 10:49:17

标签: neo4j cypher graph-databases

我正在运行查询以查找节点a是直接还是间接连接到节点b。直接我可以使用

MATCH (n)-[r]->(a)MATCH (n)-[r]->(b)

当我使用查询时

MATCH (b)-[r*1..2]->(a)

结果不同。我很难理解下面提到的两个查询之间有什么区别。

1- OPTIONAL MATCH L=a-->c-->e-->b with a,b,L,p,q,n

2- OPTIONAL MATCH M=(a)-[r*1..2]->(b)

这两个查询是否相同。如果他们是,那么在我的情况下两者的结果是不同的。 我想看到的是,a在两跳距离后连接到b。 我将非常感谢您的贡献。提前致谢

1 个答案:

答案 0 :(得分:0)

此查询:

MATCH (b)-[r*1..2]->(a)

意味着匹配一到两跳。因此,结果与您的第一个查询不同,因为您的第一个查询恰好匹配一跳。这个更进一步,结果是不同的。在这里,"啤酒花"平均关系不是节点。

此查询:

OPTIONAL MATCH L=a-->c-->e-->b with a,b,L,p,q,n

非常不同,因为您使用 3 中间关系(a-> c,c-> e,e->导航通过2个中间节点(c和e)。 b)中。

顺便说一下,你当然可以在这里使用可选匹配,但对你来说不需要它。如果必须连接a和b,那么使用可选匹配并不会真正为您改变任何内容。

因此,您需要决定是否需要2个跳/关系,或者如果您想要2个跳/节点之外的东西,则会有所不同。

另外一种编写2跳/关系的方法是:

MATCH p=(a)-[r1]-(m)-[r2]-(b)
RETURN p