首页 > 解决方案 > 使用条件边类型遍历 neo4j 图

问题描述

我有一个固定的数据库,其中的节点通过六种不同类型的关系连接人和边缘。为了简单起见,我在这篇文章中将关系类型称为 A、B、C、D、E 和 F。这些关系都不是定向的。新的语法,所以谢谢你的帮助。

我需要获取基于条件路径 A 到(B 或 CD)到 E 到 F 的遍历图的关系集。所以这意味着我首先需要链接两个节点的关系 ()-[:A]-( ),但后来我对如何表达条件关系感到困惑。要到达下一个节点,我需要 B 或 C,然后是 D,​​因此它是 ()-[:B]-() 或 ()-[:C]-()-[:D]-()。如何在 MATCH 语法中表达这种条件遍历?

尝试了所有这些并得到了语法错误:

(node2:Node)-[rel2:B|rel3:C]-(node3:Node)
(node2:Node)-[rel2:B]OR[rel3:C]-(node3:Node)

标签: neo4j

解决方案


这个纯密码查询应该返回所有匹配的路径:

MATCH p=()-[:A]-()-[r:B|C|D*1..2]-()-[:E]-()-[:F]-()
WHERE (SIZE(r) = 1 AND TYPE(r[0]) = 'B') OR
      (SIZE(r) = 2 AND TYPE(r[0]) = 'C' AND TYPE(r[1]) = 'D')
RETURN p

[r:B|C|D*1..2]模式匹配 1 或 2 个具有 、 和/或 类型的关系BC其中D可能包含您不想要的子路径);并且该WHERE子句过滤掉您不想要的子路径。


推荐阅读