我试图发现我要用Cipher认识一个朋友需要做多少次跳跃。我有这些关系。
(Gutierrez)-[:Conhece]->(Felipe),
(Felipe)-[:Conhece]->(Gutierrez),
(Felipe)-[:Conhece]->(Fernando),
(Fernando)-[:Conhece]->(Felipe),
(Fernando)-[:Conhece]->(Pedro),
(Pedro)-[:Conhece]->(Fernando),
(Pedro)-[:Conhece]->(Arthur),
(Arthur)-[:Conhece]->(Pedro),
(Arthur)-[:Conhece]->(Vitor),
(Vitor)-[:Conhece]->(Arthur),
当我执行我的查询时,它显示了费尔南多。我想要的只是展示Vitor,Pedro和Arthur。
MATCH (n:Leitor)-[r:Conhece]-m
WHERE n.nome='Pedro' OR m.nome='Vitor'
RETURN n,r,m
答案 0 :(得分:0)
你走了:
MATCH shortestPath((n:Leitor)-[rels:Conhece*]-m)
WHERE n.nome IN ['Pedro', 'Vitor']
RETURN n,rels,m,length(rels)
在这种情况下,rels
将是关系的集合,因为路径是可变长度的。你也可以这样做:
MATCH path=shortestPath((n:Leitor)-[rels:Conhece*]-m)
WHERE n.nome IN ['Pedro', 'Vitor']
RETURN n,rels,m,length(rels),path,length(path)
答案 1 :(得分:0)
好的,我正在添加另一个答案,因为我觉得我理解你想要什么,而且与我的其他答案不同。
如果你想找到Pedro和Vitor都遇到的每个人(在这种情况下,只是作者):
MATCH (pedro:Leitor)-[:Conhece]-(in_common:Leitor)-[:Conhece]-(vitor:Leitor)
WHERE pedro.nome='Pedro' AND vitor.nome='Vitor'
RETURN in_common
这也可能看起来好一点:
MATCH (pedro:Leitor {nome: 'Pedro'})-[:Conhece]-(in_common:Leitor)-[:Conhece]-(vitor:Leitor {name: 'Vitor'})
RETURN in_common
我还从截图中注意到,每次会议都有两种关系。这可能就是你想要的,但是如果你的计划是每当两个人见面时总是有两个关系,那么你就可以通过一种关系逃脱。当您双向查询时(也就是说,没有像上面的查询中那样指定方向),那么您将获得任意方向的关系。
通常情况下,如果方向很重要,您只希望双向关系。这可能是因为你只记录它从一个节点到另一个节点,或者可能是因为你在关系中存储了不同的值。