我有一个固定的数据库,其中包含连接人和边的节点与六种不同类型的关系 . 为了简单起见,我在这篇文章中称之为关系类型A,B,C,D,E和F.这些关系都不是方向性的 . 语法新,所以谢谢你的帮助 .
我需要获得基于条件路径A到(B或CD)到E到F遍历图的关系集 . 所以这意味着我首先需要链接两个节点的关系() - [:A] - ( ),但后来我对如何表达条件关系感到困惑 . 为了到达下一个节点,我需要B或C然后D,以便它是() - [:B] - ()OR() - [:C] - () - [:D] - () . 如何在MATCH语法中表达这种条件遍历?
尝试了所有这些并得到语法错误:
(node2:Node)-[rel2:B|rel3:C]-(node3:Node)
(node2:Node)-[rel2:B]OR[rel3:C]-(node3:Node)
2 回答
此纯Cypher查询应返回所有匹配的路径:
[r:B|C|D*1..2]
模式匹配1或2个关系,这些关系具有B
,C
和/或D
类型(可以包含您不需要的子路径);并且WHERE
子句过滤掉您不想要的子路径 .当遍历的跳数不同时,这不能用Cypher真正表达出来 .
最简单的方法可能是使用APOC过程中的apoc.cypher.run()来执行UNION查询以覆盖这两个路径,然后使用调用的结果: