我正在运行查询以查找节点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
。
我将非常感谢您的贡献。提前致谢
答案 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