如何列出两个端点节点之间的可选中间节点?

时间:2016-09-19 13:53:36

标签: neo4j cypher

所以,我的图表中有国家,州和城镇。这个国家和城镇之间有两种可能的关系:

(c:Country)<-[:GEO_IN]-(s:State)<-[:GEO_IN]-(t:Town)

(c:Country)<-[:GEO_IN]-(t:Town)

我试图生成一个表格,列出所有城镇的国家和州。我认为在这种关系中使用外卡匹配是有道理的......

Match(t:Town)-[:GEO_IN*]->(c:Country)

但现在我不确定如何从该列表中获取状态列表。我使用这个非常简单的例子来测试和开发更复杂的理解。所以我知道我可以做几个可选的匹配然后将它们列出来,但是如果我在t和c之间有n个可能的节点呢?

非常感谢解决方案,但正如您可能猜到的那样,我真正喜欢的是如何更深入地了解如何考虑密码以及使用哪些工具以及何时使用。

提前致谢

1 个答案:

答案 0 :(得分:1)

当你有一个可变长度时使用路径别名,它们会更容易。

MATCH path = (:Town) - [:GEO_IN*1..2] -> (:Country)
WITH NODES(path)[0] AS town, TAIL(NODES(path)) AS t_and_c
UNWIND t_and_c AS region
RETURN DISTINCT region, COUNT(DISTINCT town)

查看refcard的深度,Cypher的内容远远超过匹配节点。